commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=4314d515a5ced7a566df97e161d27bf6728b8cf0 branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
Signed-off-by: Steven Miao <[email protected]> --- drivers/staging/icc/core/protocol.c | 49 ++++++++++++---------------------- drivers/staging/icc/include/icc.h | 8 +++++ 2 files changed, 25 insertions(+), 32 deletions(-) diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c index dea4a17..563b42e 100644 --- a/drivers/staging/icc/core/protocol.c +++ b/drivers/staging/icc/core/protocol.c @@ -24,6 +24,7 @@ #include <asm/cacheflush.h> #include <asm/icc.h> #include <asm/dma.h> +#include <asm/portmux.h> #define DRIVER_NAME "icc" @@ -1243,38 +1244,24 @@ int icc_request_dev_name(const char *name, struct platform_device **saved_pdev) return 0; } -int res_manage_request_peri(uint16_t subid) +int res_manage_request_peri(resources_t *data) { - int ret; - struct platform_device *pdev; - if (icc_peri_array[subid].pdev) - return -EBUSY; + unsigned short *peri_list = (unsigned short *)data->resources_array; + char resource_name[32] = "coreb-"; - ret = icc_request_dev_name(icc_peri_array[subid].name, &pdev); - if (ret) { - /* not managed by linux, coreb can use it */ - return 0; - } + strcat(resource_name, data->label); - if (pdev->dev.driver) { - /* already bound with driver */ - return -EBUSY; - } + if (peripheral_request_list(peri_list, resource_name)) + sm_debug("Requesting Peripherals %s failed\n", resource_name); - platform_device_unregister(pdev); - icc_peri_array[subid].resource_id = subid; - icc_peri_array[subid].pdev = pdev; return 0; } -void res_manage_free_peri(uint16_t subid) +void res_manage_free_peri(resources_t *data) { - struct platform_device *pdev = icc_peri_array[subid].pdev; - if (!pdev) - return; - platform_device_add(pdev); - icc_peri_array[subid].resource_id = 0; - icc_peri_array[subid].pdev = NULL; + unsigned short *peri_list = (unsigned short *)data->resources_array; + + peripheral_free_list(peri_list); } int res_manage_request_gpio(uint16_t subid) @@ -1312,7 +1299,7 @@ void res_manage_free_dma(uint16_t subid) free_dma(subid); } -int res_manage_request(uint16_t id) +int res_manage_request(uint16_t id, resources_t *data) { int ret = 0; uint16_t type, subid; @@ -1321,7 +1308,7 @@ int res_manage_request(uint16_t id) sm_debug("%s %x %x\n", __func__, type, subid); switch (type) { case RESMGR_TYPE_PERIPHERAL: - ret = res_manage_request_peri(subid); + ret = res_manage_request_peri(data); break; case RESMGR_TYPE_GPIO: ret = res_manage_request_gpio(subid); @@ -1338,7 +1325,7 @@ int res_manage_request(uint16_t id) return ret; } -int res_manage_free(uint16_t id) +int res_manage_free(uint16_t id, resources_t *data) { int ret = 0; uint16_t type, subid; @@ -1346,7 +1333,7 @@ int res_manage_free(uint16_t id) subid = RESMGR_SUBID(id); switch (type) { case RESMGR_TYPE_PERIPHERAL: - res_manage_free_peri(subid); + res_manage_free_peri(data); break; case RESMGR_TYPE_GPIO: res_manage_free_gpio(subid); @@ -1633,11 +1620,9 @@ static int sm_resouce_manage_recvmsg(struct sm_msg *msg, struct sm_session *sess struct sm_icc_desc *icc_info = get_icc_peer(msg); BUG_ON(!icc_info); - sm_debug("%s msg type %x\n", __func__, (uint32_t)msg->type); switch (msg->type) { case SM_RES_MGR_REQUEST: - sm_debug("%s free %x\n", __func__, (uint32_t)msg->payload); - ret = res_manage_request((uint16_t)msg->payload); + ret = res_manage_request((uint16_t)msg->payload, (resources_t *)msg->length); if (ret) sm_send_control_msg(session, msg->src_ep, icc_info->peer_cpu, 0, 0, SM_RES_MGR_REQUEST_FAIL); @@ -1647,7 +1632,7 @@ static int sm_resouce_manage_recvmsg(struct sm_msg *msg, struct sm_session *sess break; case SM_RES_MGR_FREE: - res_manage_free((uint16_t)msg->payload); + res_manage_free((uint16_t)msg->payload, (resources_t *)msg->length); sm_send_control_msg(session, msg->src_ep, icc_info->peer_cpu, 0, 0, SM_RES_MGR_FREE_DONE); break; diff --git a/drivers/staging/icc/include/icc.h b/drivers/staging/icc/include/icc.h index 5cb9f62..1f9b2b4 100644 --- a/drivers/staging/icc/include/icc.h +++ b/drivers/staging/icc/include/icc.h @@ -57,6 +57,7 @@ enum { RESMGR_TYPE_MAX, }; + #define EP_RESMGR_SERVICE 0 #define RES_TYPE_OFFSET 12 @@ -289,6 +290,13 @@ struct sm_packet { void *param; }; +typedef struct { + char label[32]; /* owner name */ + uint16_t count; /* resource number in next array */ + uint32_t resources_array; /* address of the resource ID array */ +} resources_t; + + #define SM_SCALAR_CMD(x) ((x) >> 16 & 0xffff) #define SM_SCALAR_CMDARG(x) ((x) & 0xffff) #define SM_SCALAR_CMD_HEAD 0xFE
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
