Example #1
0
/* ********************************************************************   */
PFBYTE _ks_realloc(PFBYTE ptr, int num_elements, int size)
{
#if (DISPLAY_MALLOC)
    DEBUG_ERROR("ks_realloc free: ", DINT1, ptr, 0);
#endif

#    if (defined (RTKBCPP))
/*#error: needs to be implemented   */
        ptr = ks_dpmi_alloc((word)(num_elements * size));
#    elif (INCLUDE_BGET)
        ptr = ((PFBYTE)bgetr(ptr, num_elements * size));

#    elif (NACT_OS || __TM1__ && INCLUDE_DE4X5)
#error: needs to be implemented
        ptr2 = ks_malloc(ptr, num_elements * size);
        tc_movebytes(ptr2, ptr, ?);

#    elif (INCLUDE_WINSOCK || INCLUDE_BSDSOCK)
        ptr = realloc(ptr, num_elements * size);

#    elif (defined(SEG_IAR))
        /* protected mode   */
        ptr = realloc(ptr, num_elements * size);
#    elif ( defined(__BORLANDC__) )   /* real mode */
        ptr = _frealloc(ptr, num_elements * size);

#    else
        #error: ks_realloc needs to be implemented
#    endif

    return(ptr);
}
Example #2
0
/*----------------------------------------------------------------------*
                              _rtp_malloc
 *----------------------------------------------------------------------*/
void * _rtp_malloc (unsigned int size)
{
void * ptr;

	ptr = (void*) ks_malloc(1, size, 0);
    if (!ptr)
    {
        return ((void *)0);
    }
    return (ptr);
}
Example #3
0
KS_DEVICE_HANDLE ks_device_create(uint8 *device_name,
		                                uint8  device_type,
		                                uint8  can_shared,
		                                file_operations deivce_op)
{
 	device_node *device_ptr;
 	device_ptr = (device_node *)ks_malloc(sizeof(device_node));
 	device_ptr->device_name = device_name;
 	device_ptr->device_type = device_type;
 	device_ptr->can_shared  = can_shared;
 	device_ptr->deivce_op   = deivce_op;
	device_ptr->open_count  = 0;
    if(device_ptr->can_shared == NOT_CAN_SHARED){
	   device_ptr->device_sem = ks_sem_create(1);
	}
	device_ptr->state = "create";
 	return device_ptr;
}
Example #4
0
ks_event *ks_mutex_create(KS_BASE_TYPE prio,uint8 *error)
{
	ks_event * pevent;
	if(int_nesting > 0)    		 /*确保中断服务程子程序无法调用*/
	{
		return ((ks_event*)KS_MUTEX_CREATE_ERROR);
	}
#if KS_RR_EN >0
	if(prio > KS_MAX_PRIO) 		 /*防止数组溢出				   */
	{
		prio = KS_MAX_PRIO - 1;
	}
#else							 /*如果系统不支持时间轮转法    */
	#if KS_CHECK_EN >0
	if(prio > KS_MAX_PRIO)
	{
		return ((ks_event*)0);   /*返回事件空指针              */
	}
	#endif
	if(readylist[prio].item_numbers >= 1)
	{
		return ((ks_event*)0);
	}
#endif
	pevent = (ks_event*)ks_malloc(sizeof(ks_event));     /*动态申请一个事件块   */
	if(pevent == (ks_event*)0)      					 /*事件块申请失败     	*/
	{
		*error = KS_EVENT_TYPE_NULL;					 /*设置错误信息			*/
		return((ks_event*)0);							 /*返回事件空指针       */
	}
	pevent->event_type = KS_EVENT_TYPE_MUTEX;            /*设置事件控制块的类型 */
	pevent->pip = prio;                                  /*保存PIP              */
#if KS_MAX_PRIO < 256
	pevent->mutex_caller = 0xff;                         /*初始化mutex_caller   */
#elif KS_MAX_PRIO <65536
	pevent->mutex_caller = 0xffff;                       /*表示现在还没有占用者 */
#else
	pevent->mutex_caller = 0xffffffff;                   
#endif
	pevent->pevent = (void*)0;                           /*没有线程在等待       */
	ks_event_list_init(pevent);							 /*初始化等待链表       */
	*error = KS_NO_ERROR;
	return(pevent);                                      /*返回事件控制块指针   */
}
Example #5
0
ks_event *ks_sem_create(uint16 count)
{
	ks_event *pevent;                            /*定义一个事件控制块指针*/
	if(int_nesting > 0)                          /*确保中断服务程子程序无法调用*/
	{
		return (ks_event*)KS_SEM_CREATE_ERROR;
	}
	pevent = (ks_event*)ks_malloc(sizeof(ks_event)); /*动态申请一个事件块*/
	if(pevent != (ks_event*)0)                       /*事件控制块内存申请成功*/
	{
		pevent->event_type = KS_EVENT_TYPE_SEM;/*设置事件控制块的类型为信号量类型*/
		pevent->event_count = count;           /*将信号量的初始值放到事件控制块中*/
		pevent->pevent = (void*)0;             /*将.pevent指针初始化为null*/
		ks_event_list_init(pevent);            /*初始化等待链表*/
	}
	else
	{
		Uart_Printf("I am wrong int the create sem\n");/*显示错误信息*/
	}
	return (pevent);
}
Example #6
0
RTIP_BOOLEAN davicom_open(PIFACE pi)
{
PDAVICOM_SOFTC softc;
int  i;
unsigned short w;
PFBYTE p;

    if (davicom_softc[pi->minor_number] == NULL)
    {
       p = ks_malloc(sizeof(*softc)+16-1-4, PACKET_POOL_MALLOC, DRV_MALLOC);

       /* make sure on 16 byte boundary first         */
       while (((dword)p) & 15)
           p++;

       davicom_softc[pi->minor_number] = (PDAVICOM_SOFTC) p;
    }
    softc = iface_to_davicom_softc(pi);
    if (!softc)
    {
        set_errno(ENUMDEVICE);
        return (FALSE);
    }
    tc_memset((PFBYTE)softc, 0, sizeof(*softc));

    /* Set up the private data structure so that it points to the global interface      */
    /* structure. (address is needed later when returning packets)                      */
    softc->iface = pi;
    pi->driver_stats.ether_stats = (PETHER_STATS)&(softc->stats);

    /* ************************************************************     */
#if (CFG_DAVICOM_PCI)
    /* read/write suitable values for the PCI configuration registers     */
    if (!davicom_pci_init(pi, softc))
    {
        DEBUG_ERROR("davicom_open: PCI register configuration failed", NOVAR, 0, 0);
        set_errno(EPROBEFAIL);      /* ??check for a PCI init failed error code?? */
        return(FALSE);
    }
#endif /* CFG_DAVICOM_PCI */

    /* ************************************************************      */
    /* reset the Davicom chip                                            */
    WRITE_CR(DC_SCR_CR0, DC_SCR_SW_RESET);

    /* wait at least 32 PCI clock cycles     */
    ks_sleep(2);

    /* ************************************************************      */
    /* read local Ethernet address from EEPROM                           */
    w = davicom_read_srom_word( softc, 10 );    /* was 20 */
    pi->addr.my_hw_addr[0] = (unsigned char) w;
    pi->addr.my_hw_addr[1] = (unsigned char) (w >> 8);
    w = davicom_read_srom_word( softc, 11 );    /* was 22 */
    pi->addr.my_hw_addr[2] = (unsigned char) w;
    pi->addr.my_hw_addr[3] = (unsigned char) (w >> 8);
    w = davicom_read_srom_word( softc, 12 );    /* was 24 */
    pi->addr.my_hw_addr[4] = (unsigned char) w;
    pi->addr.my_hw_addr[5] = (unsigned char) (w >> 8);
#if (DEBUG_DAVICOM)
    DEBUG_ERROR("ETHERNET ADDRESS: ", ETHERADDR, pi->addr.my_hw_addr, 0);
#endif
    /* ************************************************************      */
    /* create the Tx descriptors                                         */
    for (i=0; i < DC_TX_RING_SIZE; i++)
       softc->tx_desc[i].nxt_desc = (dword) (softc->tx_desc + ((i+1) & DC_TX_RING_MASK));

    /* create the Rx descriptors      */
    for (i=0; i < DC_RX_RING_SIZE; i++)
    {
        softc->rx_dcus[i] = os_alloc_packet_input(CFG_MAX_PACKETSIZE+4, DRIVER_ALLOC);
        if (!softc->rx_dcus[i])
        {
            DEBUG_ERROR("davicom_init: out of DCUs", NOVAR, 0, 0);
            return(set_errno(ENOPKTS));
        }

        softc->rx_desc[i].buffer = (dword) DCUTODATA(softc->rx_dcus[i]);
        softc->rx_desc[i].ctrl_flags = (CFG_MAX_PACKETSIZE+4) | (1<<24);

        softc->rx_desc[i].nxt_desc = (dword) (softc->rx_desc + ((i+1) & DC_RX_RING_MASK));
        softc->rx_desc[i].status = OWN_BIT;
    }

    /* write CR3 and CR4 to provide the starting address of each descriptor      */
    /* list                                                                      */
    WRITE_CR(DC_RX_BASE_ADDR_CR3, (dword)(softc->rx_desc));
    WRITE_CR(DC_TX_BASE_ADDR_CR4, (dword)(softc->tx_desc));

    /* ************************************************************      */
    /* Write CR0 to set global host bus operation parameters             */
    WRITE_CR( DC_SCR_CR0, 0 );

    /* ************************************************************      */
    /* hook the interrupt based up PCI values read                       */
    ks_hook_interrupt(softc->dav_irq, (PFVOID) pi, 
                      (RTIPINTFN_POINTER)davicom_interrupt,
                      (RTIPINTFN_POINTER)davicom_pre_interrupt,
                      pi->minor_number);

    /* ************************************************************      */
    /* write CR7 to mask causes of unnecessary interrupt                 */
    WRITE_CR(DC_ISR_MASK_CR7, 
        /* normal     */
        DC_IMR_NISE   |         /* Normal interrupt enable */
        DC_IMR_RXCIE  |         /* Receive complete interrupt */
/*      DC_IMR_TXDUE  |       */  /* Transmit buffer unavailable enabled */
        DC_IMR_TXCIE  |         /* Transmit complete interrupt enable */

        /* abnormal     */
        DC_IMR_AISE   |         /* Abnormal interrupt enable */
        DC_IMR_RXDUE  |         /* Receive buffer unavailable */
        DC_IMR_TXFUE);          /* Transmit fifo underrun enabled */

#define DC_STATUS_MASK (DC_ISR_RX_DONE  | DC_ISR_TX_DONE | DC_ISR_ABNORMAL | DC_ISR_TX_UNDERRUN | DC_ISR_RX_NOBUF)

#if (DEBUG_DAVICOM)
   DEBUG_ERROR("davicom_init: start rcv and xmit", NOVAR, 0, 0);
#endif

    /* ************************************************************
     * write CR6 to set global parameters and start both receive and transmit
     * processes; start receive
     * DC_MODE_TX_SC - start transmitter
     * DC_MODE_RX_RC - start receiver
     * DC_MODE_PAM - receive multicasts
     * DC_MODE_1_PKT
    */
    WRITE_CR(DC_MODE_CR6, (1<<26) |
       DC_MODE_SFT_XMIT | /* wait with transmit until all data is in fifo (disable threshold) */
       DC_MODE_1_PKT |    /* only one packet in transmit fifo */
       (3<<14)       |    /* max threshohld */
       DC_MODE_TX_SC |    /* start transmit */
/*     DC_MODE_PAM |      // receive multicasts   */
       DC_MODE_RX_RC |    /* start receive */
       0);

    /* ************************************************************     */

    softc->timer.func = timeout;   /* routine to execute every second */
    softc->timer.arg = softc;
    ebs_set_timer(&softc->timer, 1, TRUE);
    ebs_start_timer(&softc->timer);

    return(TRUE);
}