|
@@ -115,7 +115,7 @@ int get_hfi_buffer(struct msm_vidc_inst *inst,
|
|
|
struct msm_vidc_buffer *buffer, struct hfi_buffer *buf)
|
|
|
{
|
|
|
if (!inst || !buffer || !buf) {
|
|
|
- d_vpr_e("%: invalid params\n", __func__);
|
|
|
+ d_vpr_e("%s: invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
@@ -136,36 +136,50 @@ int get_hfi_buffer(struct msm_vidc_inst *inst,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int hfi_create_header(u8 *pkt, u32 session_id,
|
|
|
- u32 header_id, u32 num_packets, u32 total_size)
|
|
|
+int hfi_create_header(u8 *packet, u32 packet_size, u32 session_id,
|
|
|
+ u32 header_id)
|
|
|
{
|
|
|
- struct hfi_header *hdr = (struct hfi_header *)pkt;
|
|
|
+ struct hfi_header *hdr = (struct hfi_header *)packet;
|
|
|
+
|
|
|
+ if (!packet || packet_size < sizeof(struct hfi_header)) {
|
|
|
+ d_vpr_e("%s: invalid params\n", __func__);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
memset(hdr, 0, sizeof(struct hfi_header));
|
|
|
|
|
|
- hdr->size = total_size;
|
|
|
+ hdr->size = sizeof(struct hfi_header);
|
|
|
hdr->session_id = session_id;
|
|
|
hdr->header_id = header_id;
|
|
|
- hdr->num_packets = num_packets;
|
|
|
+ hdr->num_packets = 0;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int hfi_create_packet(u8 *packet, u32 packet_size, u32 *offset,
|
|
|
+int hfi_create_packet(u8 *packet, u32 packet_size,
|
|
|
u32 pkt_type, u32 pkt_flags, u32 payload_type, u32 port,
|
|
|
u32 packet_id, void *payload, u32 payload_size)
|
|
|
{
|
|
|
- u32 available_size = packet_size - *offset;
|
|
|
- u32 pkt_size = sizeof(struct hfi_packet) + payload_size;
|
|
|
- struct hfi_packet *pkt = (struct hfi_packet *)(packet + *offset);
|
|
|
+ struct hfi_header *hdr;
|
|
|
+ struct hfi_packet *pkt;
|
|
|
+ u32 pkt_size;
|
|
|
|
|
|
- if (available_size < pkt_size) {
|
|
|
- d_vpr_e("%s: Bad packet Size for packet type %d\n",
|
|
|
- __func__, pkt_type);
|
|
|
+ if (!packet) {
|
|
|
+ d_vpr_e("%s: invalid params\n", __func__);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ hdr = (struct hfi_header *)packet;
|
|
|
+ if (hdr->size < sizeof(struct hfi_header)) {
|
|
|
+ d_vpr_e("%s: invalid hdr size %d\n", __func__, hdr->size);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ pkt = (struct hfi_packet *)(packet + hdr->size);
|
|
|
+ pkt_size = sizeof(struct hfi_packet) + payload_size;
|
|
|
+ if (packet_size < hdr->size + pkt_size) {
|
|
|
+ d_vpr_e("%s: invalid packet_size %d, %d %d\n",
|
|
|
+ __func__, packet_size, hdr->size, pkt_size);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
-
|
|
|
memset(pkt, 0, pkt_size);
|
|
|
-
|
|
|
pkt->size = pkt_size;
|
|
|
pkt->type = pkt_type;
|
|
|
pkt->flags = pkt_flags;
|
|
@@ -175,7 +189,9 @@ int hfi_create_packet(u8 *packet, u32 packet_size, u32 *offset,
|
|
|
if (payload_size)
|
|
|
memcpy((u8 *)pkt + sizeof(struct hfi_packet),
|
|
|
payload, payload_size);
|
|
|
- *offset = *offset + pkt->size;
|
|
|
+
|
|
|
+ hdr->num_packets++;
|
|
|
+ hdr->size += pkt->size;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -183,22 +199,22 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
u8 *pkt, u32 pkt_size)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- u32 offset = 0, payload = 0, num_packets = 0;
|
|
|
+ u32 payload = 0;
|
|
|
|
|
|
if (!core || !pkt) {
|
|
|
d_vpr_e("%s: Invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- if (pkt_size < sizeof(struct hfi_header)) {
|
|
|
- d_vpr_e("%s: Invalid packet size\n", __func__);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
+ rc = hfi_create_header(pkt, pkt_size,
|
|
|
+ 0 /*session_id*/,
|
|
|
+ core->header_id++);
|
|
|
+ if (rc)
|
|
|
+ goto err_sys_init;
|
|
|
|
|
|
/* HFI_CMD_SYSTEM_INIT */
|
|
|
- offset = sizeof(struct hfi_header);
|
|
|
payload = HFI_VIDEO_ARCH_OX;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_CMD_INIT,
|
|
|
(HFI_HOST_FLAGS_RESPONSE_REQUIRED |
|
|
|
HFI_HOST_FLAGS_INTR_REQUIRED |
|
|
@@ -210,11 +226,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_INTRA_FRAME_POWER_COLLAPSE */
|
|
|
payload = 0;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_INTRA_FRAME_POWER_COLLAPSE,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -224,11 +239,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_MAX_CHANNELS */
|
|
|
payload = core->platform->data.ubwc_config->max_channels;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_MAX_CHANNELS,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -238,11 +252,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_MAL_LENGTH */
|
|
|
payload = core->platform->data.ubwc_config->mal_length;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_MAL_LENGTH,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -252,11 +265,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_HBB */
|
|
|
payload = core->platform->data.ubwc_config->highest_bank_bit;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_HBB,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -266,11 +278,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_BANK_SWZL_LEVEL1 */
|
|
|
payload = core->platform->data.ubwc_config->bank_swzl_level;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_BANK_SWZL_LEVEL1,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -280,11 +291,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_BANK_SWZL_LEVEL2 */
|
|
|
payload = core->platform->data.ubwc_config->bank_swz2_level;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_BANK_SWZL_LEVEL2,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -294,11 +304,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_BANK_SWZL_LEVEL3 */
|
|
|
payload = core->platform->data.ubwc_config->bank_swz3_level;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_BANK_SWZL_LEVEL3,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -308,11 +317,10 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_UBWC_BANK_SPREADING */
|
|
|
payload = core->platform->data.ubwc_config->bank_spreading;
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_UBWC_BANK_SPREADING,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32,
|
|
@@ -320,15 +328,6 @@ int hfi_packet_sys_init(struct msm_vidc_core *core,
|
|
|
core->packet_id++,
|
|
|
&payload,
|
|
|
sizeof(u32));
|
|
|
- if (rc)
|
|
|
- goto err_sys_init;
|
|
|
- num_packets++;
|
|
|
-
|
|
|
- rc = hfi_create_header(pkt, 0 /*session_id*/,
|
|
|
- core->header_id++,
|
|
|
- num_packets,
|
|
|
- offset);
|
|
|
-
|
|
|
if (rc)
|
|
|
goto err_sys_init;
|
|
|
|
|
@@ -344,16 +343,20 @@ int hfi_packet_image_version(struct msm_vidc_core *core,
|
|
|
u8 *pkt, u32 pkt_size)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- u32 num_packets = 0, offset = 0;
|
|
|
|
|
|
if (!core || !pkt) {
|
|
|
d_vpr_e("%s: Invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ rc = hfi_create_header(pkt, pkt_size,
|
|
|
+ 0 /*session_id*/,
|
|
|
+ core->header_id++);
|
|
|
+ if (rc)
|
|
|
+ goto err_img_version;
|
|
|
+
|
|
|
/* HFI_PROP_IMAGE_VERSION */
|
|
|
- offset = sizeof(struct hfi_header);
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_IMAGE_VERSION,
|
|
|
(HFI_HOST_FLAGS_RESPONSE_REQUIRED |
|
|
|
HFI_HOST_FLAGS_INTR_REQUIRED |
|
|
@@ -362,15 +365,6 @@ int hfi_packet_image_version(struct msm_vidc_core *core,
|
|
|
HFI_PORT_NONE,
|
|
|
core->packet_id++,
|
|
|
NULL, 0);
|
|
|
- if (rc)
|
|
|
- goto err_img_version;
|
|
|
- num_packets++;
|
|
|
-
|
|
|
- rc = hfi_create_header(pkt, 0 /*session_id*/,
|
|
|
- core->header_id++,
|
|
|
- num_packets,
|
|
|
- offset);
|
|
|
-
|
|
|
if (rc)
|
|
|
goto err_img_version;
|
|
|
|
|
@@ -386,31 +380,26 @@ int hfi_packet_sys_pc_prep(struct msm_vidc_core *core,
|
|
|
u8 *pkt, u32 pkt_size)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- u32 num_packets = 0, offset = 0;
|
|
|
|
|
|
if (!core || !pkt) {
|
|
|
d_vpr_e("%s: Invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ rc = hfi_create_header(pkt, pkt_size,
|
|
|
+ 0 /*session_id*/,
|
|
|
+ core->header_id++);
|
|
|
+ if (rc)
|
|
|
+ goto err_sys_pc;
|
|
|
+
|
|
|
/* HFI_CMD_POWER_COLLAPSE */
|
|
|
- offset = sizeof(struct hfi_header);
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_CMD_POWER_COLLAPSE,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_NONE,
|
|
|
HFI_PORT_NONE,
|
|
|
core->packet_id++,
|
|
|
NULL, 0);
|
|
|
- if (rc)
|
|
|
- goto err_sys_pc;
|
|
|
- num_packets++;
|
|
|
-
|
|
|
- rc = hfi_create_header(pkt, 0 /*session_id*/,
|
|
|
- core->header_id++,
|
|
|
- num_packets,
|
|
|
- offset);
|
|
|
-
|
|
|
if (rc)
|
|
|
goto err_sys_pc;
|
|
|
|
|
@@ -426,17 +415,22 @@ int hfi_packet_sys_debug_config(struct msm_vidc_core *core,
|
|
|
u8 *pkt, u32 pkt_size, u32 debug_config)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- u32 num_packets = 0, offset = 0, payload = 0;
|
|
|
+ u32 payload = 0;
|
|
|
|
|
|
if (!core || !pkt) {
|
|
|
d_vpr_e("%s: Invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ rc = hfi_create_header(pkt, pkt_size,
|
|
|
+ 0 /*session_id*/,
|
|
|
+ core->header_id++);
|
|
|
+ if (rc)
|
|
|
+ goto err_debug;
|
|
|
+
|
|
|
/* HFI_PROP_DEBUG_CONFIG */
|
|
|
- offset = sizeof(struct hfi_header);
|
|
|
payload = debug_config; /*TODO:Change later*/
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_DEBUG_CONFIG,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32_ENUM,
|
|
@@ -446,11 +440,10 @@ int hfi_packet_sys_debug_config(struct msm_vidc_core *core,
|
|
|
sizeof(u32));
|
|
|
if (rc)
|
|
|
goto err_debug;
|
|
|
- num_packets++;
|
|
|
|
|
|
/* HFI_PROP_DEBUG_LOG_LEVEL */
|
|
|
payload = debug_config; /*TODO:Change later*/
|
|
|
- rc = hfi_create_packet(pkt, pkt_size, &offset,
|
|
|
+ rc = hfi_create_packet(pkt, pkt_size,
|
|
|
HFI_PROP_DEBUG_LOG_LEVEL,
|
|
|
HFI_HOST_FLAGS_NONE,
|
|
|
HFI_PAYLOAD_U32_ENUM,
|
|
@@ -458,15 +451,6 @@ int hfi_packet_sys_debug_config(struct msm_vidc_core *core,
|
|
|
core->packet_id++,
|
|
|
&payload,
|
|
|
sizeof(u32));
|
|
|
- if (rc)
|
|
|
- goto err_debug;
|
|
|
- num_packets++;
|
|
|
-
|
|
|
- rc = hfi_create_header(pkt, 0 /*session_id*/,
|
|
|
- core->header_id++,
|
|
|
- num_packets,
|
|
|
- offset);
|
|
|
-
|
|
|
if (rc)
|
|
|
goto err_debug;
|
|
|
|
|
@@ -483,19 +467,22 @@ int hfi_packet_session_command(struct msm_vidc_inst *inst,
|
|
|
u32 payload_type, void *payload, u32 payload_size)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- u32 num_packets = 0, offset = 0;
|
|
|
struct msm_vidc_core *core;
|
|
|
|
|
|
if (!inst || !inst->core) {
|
|
|
d_vpr_e("%s: Invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
-
|
|
|
core = inst->core;
|
|
|
- offset = sizeof(struct hfi_header);
|
|
|
+
|
|
|
+ rc = hfi_create_header(inst->packet, inst->packet_size,
|
|
|
+ session_id,
|
|
|
+ core->header_id++);
|
|
|
+ if (rc)
|
|
|
+ goto err_cmd;
|
|
|
+
|
|
|
rc = hfi_create_packet(inst->packet,
|
|
|
inst->packet_size,
|
|
|
- &offset,
|
|
|
pkt_type,
|
|
|
flags,
|
|
|
payload_type,
|
|
@@ -503,15 +490,6 @@ int hfi_packet_session_command(struct msm_vidc_inst *inst,
|
|
|
core->packet_id++,
|
|
|
payload,
|
|
|
payload_size);
|
|
|
- if (rc)
|
|
|
- goto err_cmd;
|
|
|
- num_packets++;
|
|
|
-
|
|
|
- rc = hfi_create_header(inst->packet, session_id,
|
|
|
- core->header_id++,
|
|
|
- num_packets,
|
|
|
- offset);
|
|
|
-
|
|
|
if (rc)
|
|
|
goto err_cmd;
|
|
|
|
|
@@ -528,18 +506,20 @@ int hfi_packet_session_property(struct msm_vidc_inst *inst,
|
|
|
void *payload, u32 payload_size)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- u32 num_packets = 0, offset = 0;
|
|
|
struct msm_vidc_core *core;
|
|
|
|
|
|
if (!inst || !inst->core || !inst->packet) {
|
|
|
d_vpr_e("%s: Invalid params\n", __func__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
-
|
|
|
core = inst->core;
|
|
|
- offset = sizeof(struct hfi_header);
|
|
|
+
|
|
|
+ rc = hfi_create_header(inst->packet, inst->packet_size,
|
|
|
+ inst->session_id, core->header_id++);
|
|
|
+ if (rc)
|
|
|
+ goto err_prop;
|
|
|
+
|
|
|
rc = hfi_create_packet(inst->packet, inst->packet_size,
|
|
|
- &offset,
|
|
|
pkt_type,
|
|
|
flags,
|
|
|
payload_type,
|
|
@@ -547,15 +527,6 @@ int hfi_packet_session_property(struct msm_vidc_inst *inst,
|
|
|
core->packet_id++,
|
|
|
payload,
|
|
|
payload_size);
|
|
|
- if (rc)
|
|
|
- goto err_prop;
|
|
|
- num_packets++;
|
|
|
-
|
|
|
- rc = hfi_create_header(inst->packet, inst->session_id,
|
|
|
- core->header_id++,
|
|
|
- num_packets,
|
|
|
- offset);
|
|
|
-
|
|
|
if (rc)
|
|
|
goto err_prop;
|
|
|
|