[Prism54-devel] Memory allocation question
Margit Schubert-While
margitsw at t-online.de
Mon Aug 16 20:22:31 UTC 2004
At 21:35 16.08.2004 +0200, Jens scribeth:
>Margit Schubert-While wrote:
>>In islpci_dev.c :
>> /* perform the allocation */
>> priv->driver_mem_address = pci_alloc_consistent(priv->pdev,
>> HOST_MEM_BLOCK,
>> &priv->
>>
>>device_host_address);
>> if (!priv->driver_mem_address) {
>> /* error allocating the block of PCI memory */
>> printk(KERN_ERR "%s: could not allocate DMA memory,
>> aborting!",
>> "prism54");
>> return -1;
>> }
>> /* assign the Control Block to the first address of the
>> allocated area */
>> priv->control_block =
>> (isl38xx_control_block *) priv->driver_mem_address;
>> /* set the Power Save Buffer pointer directly behind the CB */
>> priv->device_psm_buffer =
>> priv->device_host_address + CONTROL_BLOCK_SIZE;
>>Can somebody explain to my poor grey cells why we are using two
>>different pointers for the CB and PSM buffer ?
>>(Note driver_mem_address != device_host_address, one is
>> physical, one is virtual)
>
>Are you asking why priv->control_block == priv->driver_mem_address?
>Those pointers point to the same address, but have different
>type. When I reworked the memory allocation from some
>complex list-based scheme that was used previously, I didn't want
>to rework the whole driver and left the two pointers in.
>
>The device_psm_buffer is used to save some register state
>during a power-save, but those registers are distinct and
>different from those in the priv->control_block.
>
>Jens Maurer
No, I am asking why device_psm_buffer is set to "device_host_address + CBSIZE"
and not "driver_mem_address + CBSIZE".
Margit
More information about the Prism54-devel
mailing list