Here are some explanations about the use of bs and addr in in functions like <card>_c0r(void *_css, uint32_t addr, unsigned int bs, uint32_t *valp)
Byte access are bs=0001, 0010, 0100, 1000
Word access are bs=0011, 0110, 1100
Long access are bs=1111
But selects with bs=1110 or 0111 could also occur on Intel based systems if inl or outl accesses an odd address.
The 4 byte access will be splitted of into a 1 byte access and a 3 byte access.
The given address is always divideable by 4. This is through the fact, that the address bits 0 and 1 on the pci bus are used for some other functions.
The bs value selects which of the 4 Bytes are read/written together.
One example:
addr = 0100111000100, bs = 0011
reads/writes these adresses
0100111000100 0100111000101 -- --
Another example:
addr = 0100111000100, bs = 1110
reads/writes these adresses:
-- 0100111000101 0100111000110 0100111000111