11184aebb761cbeac9124c37189a80a1a58f04b6bhkuang/*
2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Intel MIC Platform Software Stack (MPSS)
3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright(c) 2013 Intel Corporation.
5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * This program is free software; you can redistribute it and/or modify
7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * it under the terms of the GNU General Public License, version 2, as
8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * published by the Free Software Foundation.
9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * This program is distributed in the hope that it will be useful, but
11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * WITHOUT ANY WARRANTY; without even the implied warranty of
12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * General Public License for more details.
14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * The full GNU General Public License is included in this distribution in
162ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * the file called "COPYING".
172ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian *
182ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * Intel MIC driver.
19da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *
20da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
21da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#ifndef __MIC_COMMON_H_
221184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#define __MIC_COMMON_H_
231184aebb761cbeac9124c37189a80a1a58f04b6bhkuang
242ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#include <linux/virtio_ring.h>
25f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
26f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang#define __mic_align(a, x) (((a) + (x) - 1) & ~((x) - 1))
27da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
28da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/**
29da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * struct mic_device_desc: Virtio device information shared between the
30f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * virtio driver and userspace backend
31f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang *
32da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @type: Device type: console/network/disk etc.  Type 0/-1 terminates.
33f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @num_vq: Number of virtqueues.
34f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @feature_len: Number of bytes of feature bits.  Multiply by 2: one for
35f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang   host features and one for guest acknowledgements.
36f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @config_len: Number of bytes of the config array after virtqueues.
371184aebb761cbeac9124c37189a80a1a58f04b6bhkuang * @status: A status byte, written by the Guest.
382ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @config: Start of the following variable length config.
395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang */
404fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangstruct mic_device_desc {
414fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang	__s8 type;
421184aebb761cbeac9124c37189a80a1a58f04b6bhkuang	__u8 num_vq;
431184aebb761cbeac9124c37189a80a1a58f04b6bhkuang	__u8 feature_len;
441184aebb761cbeac9124c37189a80a1a58f04b6bhkuang	__u8 config_len;
452ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	__u8 status;
461184aebb761cbeac9124c37189a80a1a58f04b6bhkuang	__le64 config[0];
472ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian} __attribute__ ((aligned(8)));
48da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
49da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/**
502ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * struct mic_device_ctrl: Per virtio device information in the device page
51da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * used internally by the host and card side drivers.
52da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *
53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * @vdev: Used for storing MIC vdev information by the guest.
54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * @config_change: Set to 1 by host when a config change is requested.
55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * @vdev_reset: Set to 1 by guest to indicate virtio device has been reset.
56f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @guest_ack: Set to 1 by guest to ack a command.
57f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @host_ack: Set to 1 by host to ack a command.
58f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @used_address_updated: Set to 1 by guest when the used address should be
591184aebb761cbeac9124c37189a80a1a58f04b6bhkuang * updated.
602ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @c2h_vdev_db: The doorbell number to be used by guest. Set by host.
615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * @h2c_vdev_db: The doorbell number to be used by host. Set by guest.
624fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang */
634fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangstruct mic_device_ctrl {
642ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	__le64 vdev;
651184aebb761cbeac9124c37189a80a1a58f04b6bhkuang	__u8 config_change;
662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	__u8 vdev_reset;
67da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u8 guest_ack;
682ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	__u8 host_ack;
69da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u8 used_address_updated;
70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang	__s8 c2h_vdev_db;
71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang	__s8 h2c_vdev_db;
72ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} __attribute__ ((aligned(8)));
73da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
74da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/**
75da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * struct mic_bootparam: Virtio device independent information in device page
76da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *
77da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @magic: A magic value used by the card to ensure it can see the host
78da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @h2c_config_db: Host to Card Virtio config doorbell set by card
79da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @node_id: Unique id of the node
80da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @h2c_scif_db - Host to card SCIF doorbell set by card
81da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @c2h_scif_db - Card to host SCIF doorbell set by host
82da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @scif_host_dma_addr - SCIF host queue pair DMA address
83f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @scif_card_dma_addr - SCIF card queue pair DMA address
84da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
85da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianstruct mic_bootparam {
86da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__le32 magic;
87da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__s8 h2c_config_db;
88da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u8 node_id;
89da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u8 h2c_scif_db;
90da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u8 c2h_scif_db;
91da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u64 scif_host_dma_addr;
92da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u64 scif_card_dma_addr;
93da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian} __attribute__ ((aligned(8)));
94da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
95ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/**
96ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * struct mic_device_page: High level representation of the device page
97f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang *
98f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @bootparam: The bootparam structure is used for sharing information and
99f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * status updates between MIC host and card drivers.
100f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang * @desc: Array of MIC virtio device descriptors.
1011184aebb761cbeac9124c37189a80a1a58f04b6bhkuang */
1022ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstruct mic_device_page {
1035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang	struct mic_bootparam bootparam;
1044fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang	struct mic_device_desc desc[0];
1054fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang};
1061184aebb761cbeac9124c37189a80a1a58f04b6bhkuang/**
1071184aebb761cbeac9124c37189a80a1a58f04b6bhkuang * struct mic_vqconfig: This is how we expect the device configuration field
108da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * for a virtqueue to be laid out in config space.
109da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *
1101184aebb761cbeac9124c37189a80a1a58f04b6bhkuang * @address: Guest/MIC physical address of the virtio ring
111ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * (avail and desc rings)
112ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * @used_address: Guest/MIC physical address of the used ring
113ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * @num: The number of entries in the virtio_ring
114f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang */
115da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianstruct mic_vqconfig {
116da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__le64 address;
117da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__le64 used_address;
118da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__le16 num;
119da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian} __attribute__ ((aligned(8)));
120da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
121da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/*
122da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * The alignment to use between consumer and producer parts of vring.
123da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * This is pagesize for historical reasons.
124da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
125da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#define MIC_VIRTIO_RING_ALIGN		4096
126da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
127da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#define MIC_MAX_VRINGS			4
128da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#define MIC_VRING_ENTRIES		128
129da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
130da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/*
131da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * Max vring entries (power of 2) to ensure desc and avail rings
132da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * fit in a single page
133da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
134da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#define MIC_MAX_VRING_ENTRIES		128
135da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
136da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/**
137da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * Max size of the desc block in bytes: includes:
138da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *	- struct mic_device_desc
139ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *	- struct mic_vqconfig (num_vq of these)
140f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang *	- host and guest features
141f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang *	- virtio device config space
142da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
143f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang#define MIC_MAX_DESC_BLK_SIZE		256
144ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
1451184aebb761cbeac9124c37189a80a1a58f04b6bhkuang/**
1461184aebb761cbeac9124c37189a80a1a58f04b6bhkuang * struct _mic_vring_info - Host vring info exposed to userspace backend
147ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * for the avail index and magic for the card.
1482ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian *
1492ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @avail_idx: host avail idx
150da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian * @magic: A magic debug cookie.
151da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
152da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianstruct _mic_vring_info {
153da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__u16 avail_idx;
154da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	__le32 magic;
155da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian};
156da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1572ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian/**
1582ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * struct mic_vring - Vring information.
1592ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian *
1602ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @vr: The virtio ring.
1612ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @info: Host vring information exposed to the userspace backend for the
1622ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * avail index and magic for the card.
1632ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @va: The va for the buffer allocated for vr and info.
1642ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * @len: The length of the buffer required for allocating vr and info.
1652ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian */
1662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstruct mic_vring {
1672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	struct vring vr;
1682ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	struct _mic_vring_info *info;
1692ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	void *va;
170da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	int len;
171da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian};
1722ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
1732ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#define mic_aligned_desc_size(d) __mic_align(mic_desc_size(d), 8)
1742ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
1752ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifndef INTEL_MIC_CARD
1762ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic inline unsigned mic_desc_size(const struct mic_device_desc *desc)
1772ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian{
178da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	return sizeof(*desc) + desc->num_vq * sizeof(struct mic_vqconfig)
179da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian		+ desc->feature_len * 2 + desc->config_len;
1802ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
1812ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
1822ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic inline struct mic_vqconfig *
1832ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianmic_vq_config(const struct mic_device_desc *desc)
184da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian{
185da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	return (struct mic_vqconfig *)(desc + 1);
1862ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
1874fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang
1882ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic inline __u8 *mic_vq_features(const struct mic_device_desc *desc)
1892ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian{
1902ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	return (__u8 *)(mic_vq_config(desc) + desc->num_vq);
1912ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
1922ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
193da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianstatic inline __u8 *mic_vq_configspace(const struct mic_device_desc *desc)
194da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian{
1952ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	return mic_vq_features(desc) + desc->feature_len * 2;
196da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian}
1972ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic inline unsigned mic_total_desc_size(struct mic_device_desc *desc)
1982ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian{
199da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl);
200da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian}
2012ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif
2022ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
2032ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian/* Device page size */
204da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#define MIC_DP_SIZE 4096
2052ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
206da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#define MIC_MAGIC 0xc0ffee00
207da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
2082ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian/**
2092ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * enum mic_states - MIC states.
2102ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian */
2112ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianenum mic_states {
2122ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_READY = 0,
2132ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_BOOTING,
2142ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_ONLINE,
2152ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_SHUTTING_DOWN,
2162ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_RESETTING,
2172ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_RESET_FAILED,
218da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	MIC_LAST
2192ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian};
220da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
221da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/**
2222ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * enum mic_status - MIC status reported by card after
2232ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * a host or card initiated shutdown or a card crash.
2242ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian */
2252ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianenum mic_status {
2262ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_NOP = 0,
227da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian	MIC_CRASHED,
2282ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_HALTED,
2292ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian	MIC_POWER_OFF,
230	MIC_RESTART,
231	MIC_STATUS_LAST
232};
233
234#endif
235