inb()와 readb()

puresupe의 이미지

안녕하세요.
arm 과 같이 memory mapped I/O 방식을 쓰는 아키텍처에서는
inb와 readb가 같다고 들었습니다.

유영창씨 책과, 리눅스 디바이스 드라이버(오레일리)를 보면

inb(short), readb(short) 과 같이 short형의 어드레스를 받도록 되어있는데요

왜 short형인지 궁금합니다

만약 제가, 리눅스 커널 소스중 map_desc 부분에 아래와 같이 매핑을 해두구요.

{ 0xf0200000, 0x14000000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
{ 0xf0210000, 0x14010000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
{ 0xf0220000, 0x14020000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
{ 0xf0230000, 0x14030000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0

volatile unsigned char* CS_A = 0xf0200000;
volatile unsigned char* CS_B = 0xf0210000;
volatile unsigned char* CS_A = 0xf0220000;
volatile unsigned char* CS_A = 0xf0230000;

과 같이 할때

inb(CS_A), inb(CS_B), inb(CS_C), inb(CS_D)
모두 주소를 short형으로 truncate해버리면 모두 0000 번지를
읽게되서, 어드레스 디코딩이 안되지 않을까요???

puresupe의 이미지

자답이 됐네요;

추척해보니까. (unsigned long)이 더라구요 :D