(b)yte (s)elect and addr

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

home