mirror of https://github.com/ipxe/ipxe.git
Changed length parameter in SPI methods to be a byte length, rather than
a word length.pull/1/head
parent
931f94dca3
commit
dc06c895fc
|
@ -139,13 +139,12 @@ static void spi_bit_transfer ( struct spi_bit_basher *spibit,
|
||||||
* @v address Address to read/write (<0 for no address)
|
* @v address Address to read/write (<0 for no address)
|
||||||
* @v data_out TX data buffer (or NULL)
|
* @v data_out TX data buffer (or NULL)
|
||||||
* @v data_in RX data buffer (or NULL)
|
* @v data_in RX data buffer (or NULL)
|
||||||
* @v len Length of transfer (in @b words)
|
* @v len Length of transfer
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
static int spi_bit_rw ( struct spi_bus *bus, struct spi_device *device,
|
static int spi_bit_rw ( struct spi_bus *bus, struct spi_device *device,
|
||||||
unsigned int command, int address,
|
unsigned int command, int address,
|
||||||
const void *data_out, void *data_in,
|
const void *data_out, void *data_in, size_t len ) {
|
||||||
unsigned int len ) {
|
|
||||||
struct spi_bit_basher *spibit
|
struct spi_bit_basher *spibit
|
||||||
= container_of ( bus, struct spi_bit_basher, bus );
|
= container_of ( bus, struct spi_bit_basher, bus );
|
||||||
struct spi_device_type *devtype = device->type;
|
struct spi_device_type *devtype = device->type;
|
||||||
|
@ -167,8 +166,7 @@ static int spi_bit_rw ( struct spi_bus *bus, struct spi_device *device,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transmit/receive data */
|
/* Transmit/receive data */
|
||||||
spi_bit_transfer ( spibit, data_out, data_in,
|
spi_bit_transfer ( spibit, data_out, data_in, ( len * 8 ) );
|
||||||
( len * devtype->word_len ) );
|
|
||||||
|
|
||||||
/* Deassert chip select on specified slave */
|
/* Deassert chip select on specified slave */
|
||||||
spi_bit_set_slave_select ( spibit, device->slave, DESELECT_SLAVE );
|
spi_bit_set_slave_select ( spibit, device->slave, DESELECT_SLAVE );
|
||||||
|
|
|
@ -276,7 +276,7 @@ static void rtl_read_mac ( struct rtl8139_nic *rtl, uint8_t *mac_addr ) {
|
||||||
|
|
||||||
DBG ( "MAC address is " );
|
DBG ( "MAC address is " );
|
||||||
for ( i = EE_MAC ; i < ( EE_MAC + ( ETH_ALEN / 2 ) ) ; i++ ) {
|
for ( i = EE_MAC ; i < ( EE_MAC + ( ETH_ALEN / 2 ) ) ; i++ ) {
|
||||||
device->type->read ( device, i, mac_addr, 1 );
|
device->type->read ( device, i, mac_addr, 2 );
|
||||||
DBG ( "%02x%02x", mac_addr[0], mac_addr[1] );
|
DBG ( "%02x%02x", mac_addr[0], mac_addr[1] );
|
||||||
mac_addr += 2;
|
mac_addr += 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,17 +31,16 @@
|
||||||
* @v device SPI device
|
* @v device SPI device
|
||||||
* @v address Address from which to read
|
* @v address Address from which to read
|
||||||
* @v data Data buffer
|
* @v data Data buffer
|
||||||
* @v len Length of data to read, in @b words
|
* @v len Length of data buffer
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int threewire_read ( struct spi_device *device, unsigned int address,
|
int threewire_read ( struct spi_device *device, unsigned int address,
|
||||||
void *data, unsigned int len ) {
|
void *data, size_t len ) {
|
||||||
struct spi_bus *bus = device->bus;
|
struct spi_bus *bus = device->bus;
|
||||||
|
|
||||||
assert ( bus->mode == SPI_MODE_THREEWIRE );
|
assert ( bus->mode == SPI_MODE_THREEWIRE );
|
||||||
|
|
||||||
DBG ( "3wire %p reading words [%04x,%04x)\n", device,
|
DBG ( "3wire %p reading %d bytes at %04x\n", device, len, address );
|
||||||
address, ( address + len ) );
|
|
||||||
|
|
||||||
return bus->rw ( bus, device, THREEWIRE_READ, address,
|
return bus->rw ( bus, device, THREEWIRE_READ, address,
|
||||||
NULL, data, len );
|
NULL, data, len );
|
||||||
|
|
|
@ -118,21 +118,21 @@ struct spi_device_type {
|
||||||
* @v device SPI device
|
* @v device SPI device
|
||||||
* @v address Address from which to read
|
* @v address Address from which to read
|
||||||
* @v data Data buffer
|
* @v data Data buffer
|
||||||
* @v len Length of data to read, in @b words
|
* @v len Length of data buffer
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int ( * read ) ( struct spi_device *device, unsigned int address,
|
int ( * read ) ( struct spi_device *device, unsigned int address,
|
||||||
void *data, unsigned int len );
|
void *data, size_t len );
|
||||||
/** Write data to device
|
/** Write data to device
|
||||||
*
|
*
|
||||||
* @v device SPI device
|
* @v device SPI device
|
||||||
* @v address Address to which to write
|
* @v address Address to which to write
|
||||||
* @v data Data buffer
|
* @v data Data buffer
|
||||||
* @v len Length of data to write, in @b words
|
* @v len Length of data buffer
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int ( * write ) ( struct spi_device *device, unsigned int address,
|
int ( * write ) ( struct spi_device *device, unsigned int address,
|
||||||
const void *data, unsigned int len );
|
const void *data, size_t len );
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -192,18 +192,15 @@ struct spi_bus {
|
||||||
* @v address Address to read/write (<0 for no address)
|
* @v address Address to read/write (<0 for no address)
|
||||||
* @v data_out TX data buffer (or NULL)
|
* @v data_out TX data buffer (or NULL)
|
||||||
* @v data_in RX data buffer (or NULL)
|
* @v data_in RX data buffer (or NULL)
|
||||||
* @v len Length of transfer (in @b words)
|
* @v len Length of data buffer(s)
|
||||||
*
|
*
|
||||||
* This issues the specified command and optional address to
|
* This issues the specified command and optional address to
|
||||||
* the SPI device, then reads and/or writes data to/from the
|
* the SPI device, then reads and/or writes data to/from the
|
||||||
* data buffers. Note that the transfer length is measured in
|
* data buffers.
|
||||||
* words, not in bytes. Some SPI devices have 16-bit word
|
|
||||||
* lengths; take care with these devices not to accidentally
|
|
||||||
* read or write twice as much data as intended.
|
|
||||||
*/
|
*/
|
||||||
int ( * rw ) ( struct spi_bus *bus, struct spi_device *device,
|
int ( * rw ) ( struct spi_bus *bus, struct spi_device *device,
|
||||||
unsigned int command, int address,
|
unsigned int command, int address,
|
||||||
const void *data_out, void *data_in, unsigned int len );
|
const void *data_out, void *data_in, size_t len );
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Clock phase (CPHA) mode bit
|
/** Clock phase (CPHA) mode bit
|
||||||
|
|
|
@ -56,6 +56,6 @@
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
extern int threewire_read ( struct spi_device *device, unsigned int address,
|
extern int threewire_read ( struct spi_device *device, unsigned int address,
|
||||||
void *data, unsigned int len );
|
void *data, size_t len );
|
||||||
|
|
||||||
#endif /* _GPXE_THREEWIRE_H */
|
#endif /* _GPXE_THREEWIRE_H */
|
||||||
|
|
Loading…
Reference in New Issue