123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- #ifndef __QCOM_GPR_H_
- #define __QCOM_GPR_H_
- #include <linux/spinlock.h>
- #include <linux/device.h>
- #include "soc/audio_mod_devicetable.h"
- #include <bindings/qcom,gpr.h>
- extern struct bus_type gprbus;
- enum gpr_subsys_state {
- GPR_SUBSYS_DOWN,
- GPR_SUBSYS_UP,
- GPR_SUBSYS_LOADED,
- };
- struct gpr_q6 {
-
- atomic_t q6_state;
- atomic_t modem_state;
- struct mutex lock;
- };
- #define GPR_PKT_VER 0x0
- #define GPR_PKT_INIT_PORT_V ( ( uint32_t ) 0 )
- #define GPR_PKT_INIT_RESERVED_V ( ( uint16_t ) 0 )
- #define GPR_PKT_INIT_DOMAIN_ID_V ( ( uint8_t ) 0 )
- #define GPR_IDS_DOMAIN_ID_MODEM_V ( 1 )
- #define GPR_IDS_DOMAIN_ID_ADSP_V ( 2 )
- #define GPR_IDS_DOMAIN_ID_APPS_V ( 3 )
- #define GPR_PKT_HEADER_WORD_SIZE_V ( ( sizeof( struct gpr_pkt ) + 3 ) >> 2 )
- #define GPR_PKT_HEADER_BYTE_SIZE_V ( GPR_PKT_HEADER_WORD_SIZE_V << 2 )
- #define GPR_UNDEFINED_ID_V ( ( uint32_t ) 0xFFFFFFFF )
- #define GPR_PKT_INIT_CLIENT_DATA_V ( ( uint8_t ) 0 )
- #define GPR_PKT_VERSION_MASK ( 0x0000000F )
- #define GPR_PKT_VERSION_SHFT ( 0 )
- #define GPR_PKT_HEADER_SIZE_MASK ( 0x000000F0 )
- #define GPR_PKT_HEADER_SIZE_SHFT ( 4 )
- #define GPR_PKT_RESERVED_MASK ( 0xFFF00000 )
- #define GPR_PKT_RESERVED_SHFT ( 20 )
- #define GPR_PKT_PACKET_SIZE_MASK ( 0xFFFFFF00 )
- #define GPR_PKT_PACKET_SIZE_SHFT ( 8 )
- #define GPR_GET_BITMASK( mask, shift, value ) \
- ( ( ( value ) & ( mask ) ) >> ( shift ) )
- #define GPR_SET_BITMASK( mask, shift, value ) \
- ( ( ( value ) << ( shift ) ) & ( mask ) )
- #define GPR_GET_FIELD( field, value ) \
- GPR_GET_BITMASK( ( field##_MASK ), ( field##_SHFT ), ( value ) )
- #define GPR_SET_FIELD( field, value ) \
- GPR_SET_BITMASK( ( field##_MASK ), ( field##_SHFT ), ( value ) )
- #define GPR_PTR_END_OF( base_ptr, offset ) \
- ( ( ( uint8_t* ) base_ptr ) + ( offset ) )
- #define GPR_PKT_GET_PACKET_BYTE_SIZE( header ) \
- ( GPR_GET_FIELD( GPR_PKT_PACKET_SIZE, header ) )
- #define GPR_PKT_GET_HEADER_BYTE_SIZE( header ) \
- ( GPR_GET_FIELD( GPR_PKT_HEADER_SIZE, header ) << 2 )
- #define GPR_PKT_GET_PAYLOAD_BYTE_SIZE( header ) \
- ( GPR_PKT_GET_PACKET_BYTE_SIZE( header ) - \
- GPR_PKT_GET_HEADER_BYTE_SIZE( header ) )
- #define GPR_PKT_GET_PAYLOAD( type, packet_ptr ) \
- ( ( type* ) GPR_PTR_END_OF( packet_ptr, \
- GPR_PKT_GET_HEADER_BYTE_SIZE( \
- ( ( struct gpr_hdr* ) packet_ptr )->header ) ) )
- #define GPR_HDR_FIELD(msg_type, hdr_len, ver)\
- (((msg_type & 0x3) << 8) | ((hdr_len & 0xF) << 4) | (ver & 0xF))
- #define GPR_HDR_SIZE sizeof(struct gpr_hdr)
- #define GPR_SEQ_CMD_HDR_FIELD GPR_HDR_FIELD(GPR_MSG_TYPE_SEQ_CMD, \
- GPR_HDR_LEN(GPR_HDR_SIZE), \
- GPR_PKT_VER)
- #define MM_NON_GUID(x) x
- #define MM_GUID_OWNER_QTI 0x0
- #define MM_GUID_OWNER_NON_QTI 0x1
- #define MM_GUID_OWNER_MASK MM_NON_GUID(0xF0000000)
- #define MM_GUID_OWNER_SHIFT 28
- #define MM_GUID_TYPE_RESERVED 0x0
- #define MM_GUID_TYPE_CONTROL_CMD 0x1
- #define MM_GUID_TYPE_CONTROL_CMD_RSP 0x2
- #define MM_GUID_TYPE_CONTROL_EVENT 0x3
- #define MM_GUID_TYPE_DATA_CMD 0x4
- #define MM_GUID_TYPE_DATA_CMD_RSP 0x5
- #define MM_GUID_TYPE_DATA_EVENT 0x6
- #define MM_GUID_TYPE_MODULE_ID 0x7
- #define MM_GUID_TYPE_PARAM_EVENT_ID 0x8
- #define MM_GUID_TYPE_FORMAT_ID 0x9
- #define MM_GUID_TYPE_CAPI 0xA
- #define MM_GUID_TYPE_MAX 0xB
- #define MM_GUID_INVALID 0
- #define MM_GUID_TYPE_MASK MM_NON_GUID(0x0F000000)
- #define MM_GUID_TYPE_SHIFT 24
- struct gpr_hdr {
- uint32_t header;
- uint8_t dst_domain_id;
- uint8_t src_domain_id;
- uint8_t client_data;
- uint8_t reserved;
- uint32_t src_port;
- uint32_t dst_port;
- uint32_t token;
- uint32_t opcode;
- } __packed;
- struct gpr_pkt {
- struct gpr_hdr hdr;
- uint8_t payload[0];
- };
- #define GPR_IBASIC_RSP_RESULT 0x02001005
- #define GPR_SVC_MAJOR_VERSION(v) ((v >> 16) & 0xFF)
- #define GPR_SVC_MINOR_VERSION(v) (v & 0xFF)
- struct gpr_device {
- struct device dev;
- uint16_t svc_id;
- uint16_t domain_id;
- uint32_t version;
- char name[GPR_NAME_SIZE];
- spinlock_t lock;
- struct list_head node;
- };
- #define to_gpr_device(d) container_of(d, struct gpr_device, dev)
- struct gpr_driver {
- int (*probe)(struct gpr_device *sl);
- int (*remove)(struct gpr_device *sl);
- int (*callback)(struct gpr_device *a,
- void *d);
- struct device_driver driver;
- const struct gpr_device_id *id_table;
- };
- #define to_gpr_driver(d) container_of(d, struct gpr_driver, driver)
- #define gpr_driver_register(drv) __gpr_driver_register(drv, THIS_MODULE)
- int __gpr_driver_register(struct gpr_driver *drv, struct module *owner);
- void gpr_driver_unregister(struct gpr_driver *drv);
- #define module_gpr_driver(__gpr_driver) \
- module_driver(__gpr_driver, gpr_driver_register, \
- gpr_driver_unregister)
- int gpr_send_pkt(struct gpr_device *adev, struct gpr_pkt *pkt);
- enum gpr_subsys_state gpr_get_modem_state(void);
- #endif
|