[W5500] 리눅스 드라이버에서 버퍼관련

리눅스 보드에 w5500 chip을 on board화 시켜 사용 중 입니다.
디바이스 드라이버는 리눅스 기본 드라이버를 사용 했습니다.
만약 프로그램에서 소켓 client를 4개의 서버에 따로 접속한다고 가정했을 경우,
해당 링크 코드에
https://elixir.bootlin.com/linux/v4.20.10/source/drivers/net/ethernet/wiznet/w5100.c#L655

w5500_memory_configure() 함수를 보면 원본은 하나만 rx, tx 16K씩 세팅하게 되어 있는데, 아래와 같이 4K씩 4개로 나눠 세팅을 하는게 맞는지 궁금합니다.
static void w5500_memory_configure(struct w5100_priv *priv)
{
int i;

for (i = 0; i < 4; i++) {
	w5100_write(priv, W5500_Sn_RXMEM_SIZE(i), 0x04);
	w5100_write(priv, W5500_Sn_TXMEM_SIZE(i), 0x04);
}

for (i = 4; i < 8; i++) {
	w5100_write(priv, W5500_Sn_RXMEM_SIZE(i), 0);
	w5100_write(priv, W5500_Sn_TXMEM_SIZE(i), 0);
}

}

안녕하세요,
제가 해당 코드를 확인해본결과

말씀하는 대로 사용하시면,
SOCKET 0~3 의 RX/TX memory size는 4K씩 설정되고,
SOCKET 4~7 의 RX/TC memory size는 0으로 할당됩니다.

감사합니다.
irina

답변 감사합니다.
한 가지만 더 질문 드리자면,
저렇게 했을 경우 SOCKET 0~3만 사용 가능하고 SOCKET 4~7은 버퍼가 없기 때문에 사용불가가 맞는지요?

네 밀씀하신 부분이 맞습니다.

예를 들어 SOCKET 4~7을 TCP로 SOCKET을 OPEN 한후
TCP connection 과정에서 발생하는 packet을 보면 window size가 0으로 되어있는걸 볼수 있습니다.
이때, 데이터전송을 하게 되면, buffer가 없기때문에, W5500에서는 RST packet을 보내고 SOCKET CLOSE 가 됩니다.

감사합니다.
irina