Message ID | 1290415725-12361-1-git-send-email-wd@denx.de |
---|---|
State | Accepted |
Commit | 8aa858cbc0c85738961a2ac4a98c188582c29ff4 |
Headers | show |
Le 22/11/2010 09:48, Wolfgang Denk a écrit : > - txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet)); > + txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet)); Wouldn't type-casting packet right here work? e.g.: txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, ((void*)packet))); Amicalement,
Dear Albert ARIBAUD, In message <4CEA3A7B.1070602@free.fr> you wrote: > Le 22/11/2010 09:48, Wolfgang Denk a écrit : > > > - txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet)); > > + txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet)); > > Wouldn't type-casting packet right here work? e.g.: > > txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, ((void*)packet))); No, it doesn't. The virt_to_bus() macro already has such a cast internally, but it doesn't work here. Best regards, Wolfgang Denk
Le 22/11/2010 11:07, Wolfgang Denk a écrit : > Dear Albert ARIBAUD, > > In message<4CEA3A7B.1070602@free.fr> you wrote: >> Le 22/11/2010 09:48, Wolfgang Denk a écrit : >> >>> - txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet)); >>> + txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet)); >> >> Wouldn't type-casting packet right here work? e.g.: >> >> txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, ((void*)packet))); > > No, it doesn't. The virt_to_bus() macro already has such a > cast internally, but it doesn't work here. > > Best regards, > > Wolfgang Denk Hmm, then maybe it is not the type that causes the warning, but a qualifier such as 'const' ? Amicalement,
Dear Albert ARIBAUD, In message <4CEA4E1C.2050607@free.fr> you wrote: > > > No, it doesn't. The virt_to_bus() macro already has such a > > cast internally, but it doesn't work here. ... > Hmm, then maybe it is not the type that causes the warning, but a > qualifier such as 'const' ? It's the 'volatile' attribute. Hence my name "nv_packet". Using a non-volatile pointer to compute the virtual address seems to be save. Best regards, Wolfgang Denk
diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c index 60b04c2..5f390bd 100644 --- a/drivers/net/e1000.c +++ b/drivers/net/e1000.c @@ -5018,6 +5018,7 @@ TRANSMIT - Transmit a frame static int e1000_transmit(struct eth_device *nic, volatile void *packet, int length) { + void * nv_packet = (void *)packet; struct e1000_hw *hw = nic->priv; struct e1000_tx_desc *txp; int i = 0; @@ -5025,7 +5026,7 @@ e1000_transmit(struct eth_device *nic, volatile void *packet, int length) txp = tx_base + tx_tail; tx_tail = (tx_tail + 1) % 8; - txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet)); + txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet)); txp->lower.data = cpu_to_le32(hw->txd_cmd | length); txp->upper.data = 0; E1000_WRITE_REG(hw, TDT, tx_tail);
Get rid of compiler warning: e1000.c: In function 'e1000_transmit': e1000.c:5028: warning: passing argument 1 of 'virt_to_phys' discards qualifiers from pointer target type Signed-off-by: Wolfgang Denk <wd@denx.de> --- drivers/net/e1000.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)