도와주세요!!
글 수 15,339
2003.02.17 22:12:41 (*.83.12.42)
6668
안녕하세여..
cs8900 랜카드 디바이스 드라이버 소스 분석중 입니다..
그런데..
아무리 봐도..
readblock 함수 부분이 이해가 되지 않습니다..
왜 모듈러 연산를 사용해서 홀수와 짝수 부분을 나누는 걸까요?
static void readblock(struct net_device *dev, char *pData,
int Length)
{
u16 wOddWord;
int i;
u16 StartOffset = PP_RxFrame | AUTOINCREMENT;
writeword(dev, ADD_PORT, StartOffset);
// 왜 이런 제어가 필요할까요?
if ((u32) pData % 2)
{
for (i=0; i < (Length/2); i++)
{
wOddWord = readword(dev,
DATA_PORT);
*(u8*)pData++ = (u8) wOddWord &
0xFF;
*(u8*)pData++ = (u8) (wOddWord >>
8) & 0xFF;
}
}
else
{
for (i=0; i < (Length/2); i++)
{
*(u16*) pData = readword(dev,
DATA_PORT);
pData += 2;
}
}
// 이 아래 스위치 문도 왜 필요한지 모르겠습니다.
switch (Length % 2)
{
case 1:
*pData = (u8) (readword(dev, DATA_PORT) &
0xff);
}
}
답답합니다.. 한줄기 희망을 주십시오~!!
좋은 하루 되세여..~
cs8900 랜카드 디바이스 드라이버 소스 분석중 입니다..
그런데..
아무리 봐도..
readblock 함수 부분이 이해가 되지 않습니다..
왜 모듈러 연산를 사용해서 홀수와 짝수 부분을 나누는 걸까요?
static void readblock(struct net_device *dev, char *pData,
int Length)
{
u16 wOddWord;
int i;
u16 StartOffset = PP_RxFrame | AUTOINCREMENT;
writeword(dev, ADD_PORT, StartOffset);
// 왜 이런 제어가 필요할까요?
if ((u32) pData % 2)
{
for (i=0; i < (Length/2); i++)
{
wOddWord = readword(dev,
DATA_PORT);
*(u8*)pData++ = (u8) wOddWord &
0xFF;
*(u8*)pData++ = (u8) (wOddWord >>
8) & 0xFF;
}
}
else
{
for (i=0; i < (Length/2); i++)
{
*(u16*) pData = readword(dev,
DATA_PORT);
pData += 2;
}
}
// 이 아래 스위치 문도 왜 필요한지 모르겠습니다.
switch (Length % 2)
{
case 1:
*pData = (u8) (readword(dev, DATA_PORT) &
0xff);
}
}
답답합니다.. 한줄기 희망을 주십시오~!!
좋은 하루 되세여..~