[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