|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH v3 05/18] xen/arm: ITS: Port ITS driver to xen
On Mon, Jun 29, 2015 at 9:13 PM, Vijay Kilari <vijay.kilari@xxxxxxxxx> wrote:
> On Mon, Jun 29, 2015 at 5:09 PM, Ian Campbell <ian.campbell@xxxxxxxxxx> wrote:
>> On Mon, 2015-06-22 at 17:31 +0530, vijay.kilari@xxxxxxxxx wrote:
>> [...]
>>> +/*
>>> + * ITS command descriptors - parameters to be encoded in a command
>>> + * block.
>>> + */
>>> +struct its_cmd_desc {
>>> + union {
>>> + struct {
>>> + struct its_collection *col;
>>> + u32 event_id;
>>> + u32 dev_id;
>>> + } its_inv_cmd;
>> [...]
>>> +static struct its_collection *its_build_inv_cmd(its_cmd_block *cmd,
>>> + struct its_cmd_desc *desc)
>>> +{
>>> + memset(cmd, 0x0, sizeof(its_cmd_block));
>>> + cmd->inv.cmd = GITS_CMD_INV;
>>> + cmd->inv.devid = desc->its_inv_cmd.dev_id;
>>> + cmd->inv.event = desc->its_inv_cmd.event_id;
>>> +
>>> +#ifdef DEBUG_GIC_ITS
>>> + dump_cmd(cmd);
>>> +#endif
>>> +
>>> + return desc->its_inv_cmd.col;
>>> +}
>> [...]
>>> +void its_send_inv(struct its_device *dev, struct its_collection *col,
>>> + u32 event_id)
>>> +{
>>> + struct its_cmd_desc desc;
>>> +
>>> + desc.its_inv_cmd.dev_id = dev->device_id;
>>> + desc.its_inv_cmd.event_id = event_id;
>>> + desc.its_inv_cmd.col = col;
>>> +
>>> + its_send_single_command(dev->its, its_build_inv_cmd, &desc);
>>> +}
>> [...]
>>> +typedef struct __packed {
>>> + u64 cmd:8;
>>> + u64 res1:24;
>>> + u64 devid:32;
>>> + u64 event:32;
>>> + u64 res2:32;
>>> + u64 res3:64;
>>> + u64 res4:64;
>>> +}inv_cmd_t;
>>
>> (I've trimmed this to just the INV command, but it's the same for all of
>> them)
>>
>> I suppose this is a mix of the way the Linux code was structured and my
>> request to use a struct/union to encode these things, but I'm afraid
>> this is not how I intended to suggest things be done.
>>
>> What I expected was something analogous to the hsr or lpae_t types, e.g.
>> a single:
>> union its_cmd {
>> uint64_t bits[N];
>>
>> struct {
>> uint8_t cmd;
>> uint8_t pad[...];
>> } hdr;
>>
>> struct {
>> uint8_t cmd;
>> uint8_t res1[3];
>> uint32_t devid;
>> uint32_t event;
>> uint64_t res2[2];
>> } inv;
>> };
>
Commands like MAPD has 40 bit ITT, 5 bit Size and 1 bit valid bit. So we have
to still manage with bit fields to manage with ease. So we have to use
mix of bit fields
and normal types (uint8_t & uint32_t etc.,)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |