struct CQ g_CQ;
struct CQ *pgCQ;
STATUS CQ_create(int max)
{
unsigned int i;
CMD_BUFFER **ppCmd;
CMD_BUFFER **ppCmd2;
CMD_BUFFER *pCmd;
g_CQ.head=0;
g_CQ.tail=0;
g_CQ.size=0;
g_CQ.max=max;
ppCmd=(CMD_BUFFER **)malloc(sizeof(CMD_BUFFER)*max);
if(NULL==ppCmd)
return ERROR;
bzero(ppCmd,sizeof(*ppCmd)*256);
g_CQ.ppCmd=ppCmd;
pCmd=ppCmd;
for(i=0;i<g_CQ.max;i++)
{
pCmd->cmdParameter=(unsigned char *)malloc(sizeof(unsigned char)*256);
pCmd++;
}
return OK;
}
STATUS CQ_IN(CMD_BUFFER *p)
{
struct CQ *Q=&g_CQ;
CMD_BUFFER *pcmd;
if(IS_FULL(Q))
{
printf(“Error, Q FULL\n”);
return -ERROR;
}
pcmd=Q->ppCmd;
pcmd=pcmd+Q->tail;
pcmd->cmd=p->cmd;
pcmd->cmdId=p->cmdId;
memcpy(pcmd->cmdParameter,p->cmdParameter,256);
Q->tail=(Q->tail+1)%MAX_Q_SIZE;
Q->size++;
//printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",g_CQ.head,g_CQ.tail,g_CQ.size);
return OK;
}
STATUS CQ_OUT(CMD_BUFFER *p)
{
struct CQ *Q=&g_CQ;
CMD_BUFFER *pcmd;
if(IS_EMPTY(Q))
{
printf("Error, Q empty\n");
return -ERROR;
}
pcmd=Q->ppCmd;
pcmd=pcmd+Q->head;
p->cmd=pcmd->cmd;
p->cmdId=pcmd->cmdId;
memcpy(p->cmdParameter,pcmd->cmdParameter,256);
Q->head=(Q->head+1)%MAX_Q_SIZE;
Q->size--;
//printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",g_CQ.head,g_CQ.tail,g_CQ.size);
return OK;
}
struct CQ *pgCQ;
CMD_BUFFER **ppCmd;
STATUS createCQ(void)
{
unsigned int i;
CMD_BUFFER *pCmd;
pgCQ=calloc(1,sizeof(struct CQ));
if(NULL==pgCQ)
return ERROR;
pgCQ->head=0;
pgCQ->tail=0;
pgCQ->size=0;
pgCQ->max=MAX_Q_SIZE;
*ppCmd=calloc(MAX_Q_SIZE,sizeof(CMD_BUFFER));
printf("ppCmd=0x%x,*ppCmd=0x%x\n",ppCmd,*ppCmd);
if(NULL==*ppCmd)
return ERROR;
//bzero(*ppCmd,sizeof(*ppCmd)*256);
*g_CQ.ppCmd=*ppCmd;
pCmd=*ppCmd;
for(i=0;i<g_CQ.max;i++)
{
pCmd->cmdParameter=(unsigned char *)malloc(sizeof(unsigned char)*256);
pCmd->length=512;
pCmd++;
}
printf("Create CQ OK\n");
return OK;
}
STATUS PutInCQ(struct CQ *pQ,CMD_BUFFER *p)
{
struct CQ *Q=pQ;
CMD_BUFFER *pcmd;
if(IS_FULL(Q))
{
printf(“Error, Q FULL\n”);
return -ERROR;
}
pcmd=*(Q->ppCmd);
pcmd=pcmd+Q->tail;
pcmd->cmd=p->cmd;
pcmd->cmdId=p->cmdId;
memcpy(pcmd->cmdParameter,p->cmdParameter,256);
Q->tail=(Q->tail+1)%MAX_Q_SIZE;
Q->size++;
printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",Q->head,Q->tail,Q->size);
return OK;
}
STATUS GetOutCQ(struct CQ *pQ,CMD_BUFFER *p)
{
struct CQ *Q=pQ;
CMD_BUFFER *pcmd;
if(IS_EMPTY(Q))
{
printf("Error, Q empty\n");
return -ERROR;
}
pcmd=*(Q->ppCmd);
pcmd=pcmd+Q->head;
p->cmd=pcmd->cmd;
p->cmdId=pcmd->cmdId;
memcpy(p->cmdParameter,pcmd->cmdParameter,256);
Q->head=(Q->head+1)%MAX_Q_SIZE;
Q->size--;
printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",Q->head,Q->tail,Q->size);
return OK;
}
typedef struct val
{
int m;
int n;
int *(*addr);
};
typedef struct pp
{
int *pdata;
};
typedef struct val2
{
int m;
int n;
struct pp **addr;
};
struct val val1;
struct val val2;
void test3(void)
{
int i,j;
val2.m=10;
val2.n=10;
struct pp *p;
val2.addr=(int )malloc(val2.n*sizeof(struct pp));
printf("*val2.addr=0x%x\n",*val2.addr);
p=*val2.addr;
for(i=0;i<10;i++)
{
p->pdata=(int *)malloc(sizeof(int)*val2.m);
p++;
}
}
void test2(void)
{
int i,j;
val1.m=10;
val1.n=10;
val1.addr=(int *)malloc(val1.m*sizeof(int ));
for(i=0;i<val1.m;i++)
{
val1.addr[i]=(int *)malloc(val1.n*sizeof(int));
}
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
*(val1.addr[i]+j)=i*j;
}
}