void * connector_af_unix_accept (void * connector) { struct tcloud_connector * this_conn; struct tcloud_connector * channel_conn; struct connector_af_unix_info * base_info; struct connector_af_unix_server_info * server_info; struct connector_af_unix_info * channel_base_info; struct connector_af_unix_channel_info * channel_info; int retval; int accept_fd; this_conn=(struct tcloud_connector *)connector; if(this_conn->conn_type!=CONN_SERVER) return -EINVAL; if(this_conn->conn_protocol!=AF_UNIX) return -EINVAL; base_info=(struct connector_af_unix_info * )this_conn->conn_base_info; server_info=(struct connector_af_unix_server_info * )this_conn->conn_var_info; accept_fd= accept(this_conn->conn_fd,NULL,0); if(accept_fd<=0) return NULL; channel_conn=get_connector(CONN_CHANNEL,AF_UNIX); if(channel_conn==NULL) return NULL; channel_base_info = create_channel_af_unix_info(base_info); channel_conn->conn_fd=accept_fd; channel_conn->conn_ops->setname(channel_conn,this_conn->conn_ops->getname(this_conn)); channel_info=kmalloc(sizeof(struct connector_af_unix_channel_info),GFP_KERNEL); if(channel_info==NULL) return NULL; channel_info->server=this_conn; channel_conn->conn_base_info=channel_base_info; channel_conn->conn_var_info=channel_info; struct list_head * head, *currlib; Record_List * record_elem; record_elem = kmalloc(sizeof(Record_List),GFP_KERNEL); if(record_elem==NULL) return -ENOMEM; INIT_LIST_HEAD(&(record_elem->list)); record_elem->record=channel_conn; head = &(server_info->channel_list.list); list_add_tail(&(record_elem->list),head); server_info->channel_num++; return channel_conn; }
static struct gbm_dev * stereo_prepare_dev(int fd, const struct gbm_options *options) { drmModeRes *res; drmModeConnector *conn; struct gbm_dev *dev; int ret; /* retrieve resources */ res = drmModeGetResources(fd); if (!res) { fprintf(stderr, "cannot retrieve DRM resources (%d): %m\n", errno); goto error; } conn = get_connector(fd, res, options); if (!conn) goto error_resources; /* create a device structure */ dev = xmalloc(sizeof(*dev)); memset(dev, 0, sizeof(*dev)); dev->conn = conn->connector_id; dev->fd = fd; /* call helper function to prepare this connector */ ret = stereo_setup_dev(res, conn, options, dev); if (ret) { if (ret != -ENOENT) { errno = -ret; fprintf(stderr, "cannot setup device for connector " "%u:%u (%d): %m\n", 0, res->connectors[0], errno); } goto error_dev; } drmModeFreeConnector(conn); drmModeFreeResources(res); return dev; error_dev: free(dev); drmModeFreeConnector(conn); error_resources: drmModeFreeResources(res); error: return NULL; }
int json_port_init(void * sub_proc,void * para) { int ret; struct json_server_context * sub_context; struct message_box * msg_box; struct message_box * new_msg; struct tcloud_connector_hub * port_hub; MESSAGE_HEAD * msg_head; char local_uuid[DIGEST_SIZE*2+1]; char proc_name[DIGEST_SIZE*2+1]; ret=proc_share_data_getvalue("uuid",local_uuid); if(ret<0) return ret; ret=proc_share_data_getvalue("proc_name",proc_name); register_record_type("SYNI",connect_syn_desc); // process init sub_context=malloc(sizeof(struct json_server_context)); if(sub_context==NULL) return -ENOMEM; memset(sub_context,0,sizeof(struct json_server_context)); void * context; ret=sec_subject_getcontext(sub_proc,&context); if(ret<0) return ret; sec_object_setpointer(context,sub_context); // parameter deal with char * server_name="json_server"; char * server_uuid=local_uuid; char * service=sec_subject_getname(sub_proc); char * server_addr=local_jsonserver_addr; char * nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; struct connect_syn * syn_info; syn_info=malloc(sizeof(struct connect_syn)); if(syn_info==NULL) return -ENOMEM; memset(syn_info,0,sizeof(struct connect_syn)); char buffer[1024]; memset(buffer,0,1024); int stroffset=0; msg_box=build_server_syn_message(service,local_uuid,proc_name); stroffset=message_2_json(msg_box,buffer); printf("json message size is %d\n",stroffset); printf("json message:%s\n",buffer); ret=json_2_message(buffer,&new_msg); if(ret<0) return -EINVAL; sub_context->json_message=dup_str(buffer,0); sub_context->message_len=strlen(buffer); port_hub=get_connector_hub(); sub_context->json_port_hub=port_hub; struct tcloud_connector * temp_conn; temp_conn=get_connector(CONN_SERVER,AF_INET); if((temp_conn ==NULL) || IS_ERR(temp_conn)) { printf("get json server conn failed!\n"); return -EINVAL; } ret=temp_conn->conn_ops->init(temp_conn,server_name,server_addr); if(ret<0) { printf("init conn json_server failed!\n"); return -EINVAL; } port_hub->hub_ops->add_connector(port_hub,temp_conn,NULL); ret=temp_conn->conn_ops->listen(temp_conn); if(ret<0) return -EINVAL; return 0; }
static void setup_phy(struct drm_encoder *encoder) { struct drm_device *dev = encoder->dev; struct drm_connector *connector = get_connector(encoder); struct mdp4_kms *mdp4_kms = get_kms(encoder); uint32_t lvds_intf = 0, lvds_phy_cfg0 = 0; int bpp, nchan, swap; if (!connector) return; bpp = 3 * connector->display_info.bpc; if (!bpp) bpp = 18; /* TODO, these should come from panel somehow: */ nchan = 1; swap = 0; switch (bpp) { case 24: mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(0), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x08) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x05) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x04) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x03)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(0), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x02) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x01) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x00)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(1), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x11) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x10) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x0d) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x0c)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(1), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x0b) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x0a) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x09)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(2), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x1a) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x19) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x18) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x15)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(2), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x14) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x13) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x12)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(3), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x1b) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x17) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x16) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x0f)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(3), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x0e) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x07) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x06)); if (nchan == 2) { lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE3_EN | MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE2_EN | MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE1_EN | MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE0_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE3_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE2_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE1_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE0_EN; } else { lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE3_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE2_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE1_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE0_EN; } break; case 18: mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(0), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x0a) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x07) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x06) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x05)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(0), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x04) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x03) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x02)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(1), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x13) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x12) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x0f) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x0e)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(1), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x0d) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x0c) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x0b)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_3_TO_0(2), MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT0(0x1a) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT1(0x19) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT2(0x18) | MDP4_LCDC_LVDS_MUX_CTL_3_TO_0_BIT3(0x17)); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_MUX_CTL_6_TO_4(2), MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT4(0x16) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT5(0x15) | MDP4_LCDC_LVDS_MUX_CTL_6_TO_4_BIT6(0x14)); if (nchan == 2) { lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE2_EN | MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE1_EN | MDP4_LCDC_LVDS_INTF_CTL_CH2_DATA_LANE0_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE2_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE1_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE0_EN; } else { lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE2_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE1_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_DATA_LANE0_EN; } lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_RGB_OUT; break; default: dev_err(dev->dev, "unknown bpp: %d\n", bpp); return; } switch (nchan) { case 1: lvds_phy_cfg0 = MDP4_LVDS_PHY_CFG0_CHANNEL0; lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH1_CLK_LANE_EN | MDP4_LCDC_LVDS_INTF_CTL_MODE_SEL; break; case 2: lvds_phy_cfg0 = MDP4_LVDS_PHY_CFG0_CHANNEL0 | MDP4_LVDS_PHY_CFG0_CHANNEL1; lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH2_CLK_LANE_EN | MDP4_LCDC_LVDS_INTF_CTL_CH1_CLK_LANE_EN; break; default: dev_err(dev->dev, "unknown # of channels: %d\n", nchan); return; } if (swap) lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_CH_SWAP; lvds_intf |= MDP4_LCDC_LVDS_INTF_CTL_ENABLE; mdp4_write(mdp4_kms, REG_MDP4_LVDS_PHY_CFG0, lvds_phy_cfg0); mdp4_write(mdp4_kms, REG_MDP4_LCDC_LVDS_INTF_CTL, lvds_intf); mdp4_write(mdp4_kms, REG_MDP4_LVDS_PHY_CFG2, 0x30); mb(); udelay(1); lvds_phy_cfg0 |= MDP4_LVDS_PHY_CFG0_SERIALIZATION_ENBLE; mdp4_write(mdp4_kms, REG_MDP4_LVDS_PHY_CFG0, lvds_phy_cfg0); }