Changeset 36cb812 in rtems


Ignore:
Timestamp:
Dec 18, 2006, 9:46:59 AM (13 years ago)
Author:
Thomas Doerfler <Thomas.Doerfler@…>
Children:
7e278aa
Parents:
d761931e
Message:

corrected bug in ata.c to avoid lockup of libblock
added remote frequest support to gen5200 BSP

Files:
13 edited

Legend:

Unmodified
Added
Removed
  • c/src/ChangeLog

    rd761931e r36cb812  
     12006-12-18      Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
     2
     3        * libchip/ide/ata.c: in ata_request_done: moved call to free()
     4        from preemption disabled region
     5
    162006-12-13      Joel Sherrill <joel@OARcorp.com>
    27
  • c/src/lib/libbsp/powerpc/ChangeLog

    rd761931e r36cb812  
     12006-12-18      Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
     2
     3        * gen5200/mscan/mscan.c,
     4        * gen5200/mscan/mscan.h,
     5        * gen5200/mscan/mscan_int.h:
     6        split mscan.h into two headers, corrected CAN filtering code to
     7        support remote requests
     8
    192006-12-13      Till Straumann <strauman@slac.stanford.edu>
    210
  • c/src/lib/libbsp/powerpc/gen5200/Makefile.am

    rd761931e r36cb812  
    8585
    8686noinst_PROGRAMS += mscan.rel
    87 mscan_rel_SOURCES = mscan/mscan.c mscan/mscan.h
     87mscan_rel_SOURCES = mscan/mscan.c mscan/mscan.h mscan/mscan_int.h
    8888mscan_rel_CPPFLAGS = $(AM_CPPFLAGS)
    8989mscan_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
  • c/src/lib/libbsp/powerpc/gen5200/ide/pcmcia_ide.c

    rd761931e r36cb812  
    9292#endif
    9393#define IDE_DMA_TEST            FALSE
     94
     95#ifdef BRS5L
    9496#define IDE_USE_INT             TRUE
    9597#define IDE_READ_USE_DMA        TRUE
     
    99101/* #define IDE_USE_DMA (IDE_READ_USE_DMA||IDE_WRITE_USE_DMA) */
    100102#define IDE_USE_DMA             TRUE
     103#else
     104#define IDE_USE_INT             TRUE
     105#define IDE_READ_USE_DMA        FALSE
     106#define IDE_USE_READ_PIO_OPT    FALSE
     107#define IDE_WRITE_USE_DMA       FALSE
     108#define IDE_USE_WRITE_PIO_OPT   FALSE
     109/* #define IDE_USE_DMA (IDE_READ_USE_DMA||IDE_WRITE_USE_DMA) */
     110#define IDE_USE_DMA             FALSE
     111#endif
     112
    101113#define IDE_USE_STATISTICS      TRUE
    102114
  • c/src/lib/libbsp/powerpc/gen5200/mscan/mscan.c

    rd761931e r36cb812  
    2727#include "../irq/irq.h"
    2828#include "../include/mpc5200.h"
    29 #include "mscan.h"
     29#include "../mscan/mscan_int.h"
    3030
    3131/* #define MSCAN_LOOPBACK */
    32 
    33 volatile uint32_t tx_int_wr_count = 0;
    3432
    3533struct mpc5200_rx_cntrl mpc5200_mscan_rx_cntrl[MPC5200_CAN_NO];
     
    177175          mscan->txidr3 = 0;
    178176
     177              }
     178
     179        /* fill in tx data if TOUCAN is activ an TOUCAN index have a match with the tx buffer or TOUCAN is disabled */
     180        if(((mscan_hdl->toucan_callback) == NULL) || (((mscan_hdl->toucan_callback) != NULL) && ((tx_mess_ptr->toucan_tx_idx) == idx)))
     181          {
     182
    179183          /* insert dlc into mscan register */
    180184                  mscan->txdlr = (uint8_t)((tx_mess_ptr->mess_len) & 0x000F);
    181               }
    182 
    183         /* select one free tx buffer if TOUCAN not registered) */
    184         if(((mscan_hdl->toucan_callback) == NULL) || (((mscan_hdl->toucan_callback) != NULL) && ((tx_mess_ptr->toucan_tx_id) == idx)))
    185           {
    186 
    187           /* set tx id */
    188                   mscan->txidr0 = SET_IDR0(tx_mess_ptr->mess_id);
    189                   mscan->txidr1 = SET_IDR1(tx_mess_ptr->mess_id);
    190                   mscan->txidr2 = 0;
    191           mscan->txidr3 = 0;
    192 
    193           /* insert dlc into mscan register */
    194                   mscan->txdlr = (uint8_t)((tx_mess_ptr->mess_len) & 0x000F);
    195 
    196           /* copy tx data to MSCAN registers */
    197           switch(mscan->txdlr)
     185
     186          /* skip data copy in case of RTR */
     187          if(!(MSCAN_MESS_ID_HAS_RTR(tx_mess_ptr->mess_id)))
    198188            {
    199             case 8:
    200               mscan->txdsr7 = tx_mess_ptr->mess_data[7];
    201             case 7:
    202               mscan->txdsr6 = tx_mess_ptr->mess_data[6];
    203             case 6:
    204               mscan->txdsr5 = tx_mess_ptr->mess_data[5];
    205             case 5:
    206               mscan->txdsr4 = tx_mess_ptr->mess_data[4];
    207             case 4:
    208               mscan->txdsr3 = tx_mess_ptr->mess_data[3];
    209             case 3:
    210               mscan->txdsr2 = tx_mess_ptr->mess_data[2];
    211             case 2:
    212               mscan->txdsr1 = tx_mess_ptr->mess_data[1];
    213             case 1:
    214               mscan->txdsr0 = tx_mess_ptr->mess_data[0];
    215               break;
    216             default:
    217               break;
    218             }
     189            /* copy tx data to MSCAN registers */
     190            switch(mscan->txdlr)
     191              {
     192              case 8:
     193                mscan->txdsr7 = tx_mess_ptr->mess_data[7];
     194              case 7:
     195                mscan->txdsr6 = tx_mess_ptr->mess_data[6];
     196              case 6:
     197                mscan->txdsr5 = tx_mess_ptr->mess_data[5];
     198              case 5:
     199                mscan->txdsr4 = tx_mess_ptr->mess_data[4];
     200              case 4:
     201                mscan->txdsr3 = tx_mess_ptr->mess_data[3];
     202              case 3:
     203                mscan->txdsr2 = tx_mess_ptr->mess_data[2];
     204              case 2:
     205                mscan->txdsr1 = tx_mess_ptr->mess_data[1];
     206              case 1:
     207                mscan->txdsr0 = tx_mess_ptr->mess_data[0];
     208                break;
     209              default:
     210                break;
     211              }
     212                    }
    219213
    220214          /* enable message buffer specific interrupt */
     
    226220          /* release counting semaphore of tx ring buffer */
    227221                  rtems_semaphore_release((rtems_id)(chan->tx_rb_sid));
    228 
    229                   tx_int_wr_count++;
    230222
    231223          }
     
    302294      rx_mess_ptr->mess_time_stamp = ((mscan->rxtimh << 8) | (mscan->rxtiml));
    303295
    304       /* get the data */
    305           switch(rx_mess_ptr->mess_len)
    306             {
    307 
    308             case 8:
    309               rx_mess_ptr->mess_data[7] = mscan->rxdsr7;
    310             case 7:
    311               rx_mess_ptr->mess_data[6] = mscan->rxdsr6;
    312             case 6:
    313               rx_mess_ptr->mess_data[5] = mscan->rxdsr5;
    314             case 5:
    315               rx_mess_ptr->mess_data[4] = mscan->rxdsr4;
    316             case 4:
    317               rx_mess_ptr->mess_data[3] = mscan->rxdsr3;
    318             case 3:
    319               rx_mess_ptr->mess_data[2] = mscan->rxdsr2;
    320             case 2:
    321               rx_mess_ptr->mess_data[1] = mscan->rxdsr1;
    322             case 1:
    323               rx_mess_ptr->mess_data[0] = mscan->rxdsr0;
    324             case 0:
    325             default:
    326               break;
    327 
     296      /* skip data copy in case of RTR */
     297      if(!(MSCAN_MESS_ID_HAS_RTR(rx_mess_ptr->mess_id)))
     298
     299        {
     300
     301         /* get the data */
     302             switch(rx_mess_ptr->mess_len)
     303               {
     304               case 8:
     305                 rx_mess_ptr->mess_data[7] = mscan->rxdsr7;
     306               case 7:
     307                 rx_mess_ptr->mess_data[6] = mscan->rxdsr6;
     308               case 6:
     309                 rx_mess_ptr->mess_data[5] = mscan->rxdsr5;
     310               case 5:
     311                 rx_mess_ptr->mess_data[4] = mscan->rxdsr4;
     312               case 4:
     313                 rx_mess_ptr->mess_data[3] = mscan->rxdsr3;
     314               case 3:
     315                 rx_mess_ptr->mess_data[2] = mscan->rxdsr2;
     316               case 2:
     317                 rx_mess_ptr->mess_data[1] = mscan->rxdsr1;
     318               case 1:
     319                 rx_mess_ptr->mess_data[0] = mscan->rxdsr0;
     320               case 0:
     321               default:
     322                 break;
     323               }
    328324            }
    329325
     
    872868  mscan->idac |=  (IDAC_IDAM0);
    873869
    874   /* initialize rx filter masks (16 bit) */
    875   mscan->idmr0  = SET_IDMR0(0x07FF);
    876   mscan->idmr1  = SET_IDMR1(0x07FF);
    877   mscan->idmr2  = SET_IDMR2(0x07FF);
    878   mscan->idmr3  = SET_IDMR3(0x07FF);
    879   mscan->idmr4  = SET_IDMR4(0x07FF);
    880   mscan->idmr5  = SET_IDMR5(0x07FF);
    881   mscan->idmr6  = SET_IDMR6(0x07FF);
    882   mscan->idmr7  = SET_IDMR7(0x07FF);
     870  /* initialize rx filter masks (16 bit), don't care including rtr */
     871  mscan->idmr0  = SET_IDMR0(0x7FF);
     872  mscan->idmr1  = SET_IDMR1(0x7FF);
     873  mscan->idmr2  = SET_IDMR2(0x7FF);
     874  mscan->idmr3  = SET_IDMR3(0x7FF);
     875  mscan->idmr4  = SET_IDMR4(0x7FF);
     876  mscan->idmr5  = SET_IDMR5(0x7FF);
     877  mscan->idmr6  = SET_IDMR6(0x7FF);
     878  mscan->idmr7  = SET_IDMR7(0x7FF);
    883879
    884880  /* Control Register 1 --------------------------------------------*/
     
    13021298
    13031299    /* append the TOUCAN tx_id to the mess. due to interrupt handling */
    1304         tx_mess->toucan_tx_id = tx_parms->tx_id;
     1300        tx_mess->toucan_tx_idx = tx_parms->tx_idx;
    13051301
    13061302    /* fill the tx ring buffer with the message */
     
    14871483
    14881484        case RX_BUFFER_0:
    1489           ctrl_parms->ctrl_id_mask = GET_IDMR0(mscan->idmr0) | GET_IDMR1(mscan->idmr1);
     1485          ctrl_parms->ctrl_id_mask = (GET_IDMR0(mscan->idmr0) | GET_IDMR1(mscan->idmr1));
    14901486          break;
    14911487
    14921488        case RX_BUFFER_1:
    1493           ctrl_parms->ctrl_id_mask = GET_IDMR2(mscan->idmr2) | GET_IDMR3(mscan->idmr3);
     1489          ctrl_parms->ctrl_id_mask = (GET_IDMR2(mscan->idmr2) | GET_IDMR3(mscan->idmr3));
    14941490          break;
    14951491
    14961492        case RX_BUFFER_2:
    1497           ctrl_parms->ctrl_id_mask = GET_IDMR4(mscan->idmr4) | GET_IDMR5(mscan->idmr5);
     1493          ctrl_parms->ctrl_id_mask = (GET_IDMR4(mscan->idmr4) | GET_IDMR5(mscan->idmr5));
    14981494          break;
    14991495
    15001496        case RX_BUFFER_3:
    1501           ctrl_parms->ctrl_id_mask = GET_IDMR6(mscan->idmr6) | GET_IDMR7(mscan->idmr7);
     1497          ctrl_parms->ctrl_id_mask = (GET_IDMR6(mscan->idmr6) | GET_IDMR7(mscan->idmr7));
    15021498          break;
    15031499
  • c/src/lib/libbsp/powerpc/gen5200/mscan/mscan.h

    rd761931e r36cb812  
    1818|                                                                 |
    1919+-----------------------------------------------------------------+
    20 | this file declares stuff for the mscan driver                   |
     20| this file has to be included by application when using mscan    |
    2121\*===============================================================*/
    2222#ifndef __MSCAN_H__
     
    2727#endif
    2828
    29 #define MIN_NO_OF_TQ         7
    30 #define NO_OF_TABLE_ENTRIES  4
    31 #define TSEG_1               1
    32 #define TSEG_2               2
    33 #define SJW                  3
    34 
    35 #define MSCAN_MAX_DATA_BYTES     8
    36 #define MSCAN_RX_BUFF_NUM        4
    37 #define MSCAN_TX_BUFF_NUM        3
    38 
    39 
    4029#define MSCAN_A_DEV_NAME         "/dev/mscana"
    4130#define MSCAN_B_DEV_NAME         "/dev/mscanb"
     
    4534#define MSCAN_B                  1
    4635
    47 #define MSCAN_NON_INITIALIZED_MODE   0
    48 #define MSCAN_INITIALIZED_MODE       1
    49 #define MSCAN_INIT_NORMAL_MODE       2
    50 #define MSCAN_NORMAL_MODE            4
    51 #define MSCAN_SLEEP_MODE             8
     36#define MSCAN_MAX_DATA_BYTES     8
    5237
    53 #define CAN_BIT_RATE_MAX         1000000
    54 #define CAN_BIT_RATE_MIN         100000
    55 
    56 #define CAN_BIT_RATE             100000
    57 #define CAN_MAX_NO_OF_TQ         25
    58 #define CAN_MAX_NO_OF_TQ_TSEG1   15
    59 #define CAN_MAX_NO_OF_TQ_TSEG2   7
    60 #define CAN_MAX_NO_OF_TQ_SJW     2
     38#define MSCAN_MESS_ID_RTR        (1 << 15)
     39#define MSCAN_MESS_ID_RTR_MASK   (1 << 15)
     40#define MSCAN_MESS_ID_ID_MASK    ((1 << 11)-1)
     41#define MSCAN_MESS_ID_HAS_RTR(id) (((id)&MSCAN_MESS_ID_RTR_MASK)==MSCAN_MESS_ID_RTR)
    6142
    6243#define MSCAN_SET_RX_ID          1
     
    6647#define MSCAN_SET_TX_ID          5
    6748#define MSCAN_GET_TX_ID          6
    68 
    6949#define TOUCAN_MSCAN_INIT        7
    7050#define MSCAN_SET_BAUDRATE       8
    7151#define SET_TX_BUF_NO            9
    72 
    73 #define MSCAN_RX_BUFF_NOACTIVE   (0 << 4)
    74 #define MSCAN_RX_BUFF_EMPTY      (1 << 6)
    75 #define MSCAN_RX_BUFF_FULL       (1 << 5)
    76 #define MSCAN_RX_BUFF_OVERRUN    ((MSCAN_RX_BUFF_EMPTY) | (MSCAN_RX_BUFF_FULL))
    77 #define MSCAN_RX_BUFF_BUSY       (1 << 4)
    78 
    79 #define MSCAN_MBUFF_MASK         0x07
    80 
    81 #define MSCAN_TX_BUFF0           (1 << 0)
    82 #define MSCAN_TX_BUFF1           (1 << 1)
    83 #define MSCAN_TX_BUFF2           (1 << 2)
    84 
    85 #define MSCAN_IDE                (1 << 0)
    86 #define MSCAN_RTR                (1 << 1)
    87 #define MSCAN_READ_RXBUFF_0      (1 << 2)
    88 #define MSCAN_READ_RXBUFF_1      (1 << 2)
    89 #define MSCAN_READ_RXBUFF_2      (1 << 2)
    90 #define MSCAN_READ_RXBUFF_3      (1 << 2)
    91 
    92 #define CTL0_RXFRM               (1 << 7)
    93 #define CTL0_RXACT               (1 << 6)
    94 #define CTL0_CSWAI               (1 << 5)
    95 #define CTL0_SYNCH               (1 << 4)
    96 #define CTL0_TIME                (1 << 3)
    97 #define CTL0_WUPE                (1 << 2)
    98 #define CTL0_SLPRQ               (1 << 1)
    99 #define CTL0_INITRQ              (1 << 0)
    100 
    101 #define CTL1_CANE                (1 << 7)
    102 #define CTL1_CLKSRC              (1 << 6)
    103 #define CTL1_LOOPB               (1 << 5)
    104 #define CTL1_LISTEN              (1 << 4)
    105 #define CTL1_WUPM                (1 << 2)
    106 #define CTL1_SLPAK               (1 << 1)
    107 #define CTL1_INITAK              (1 << 0)
    108 
    109 #define BTR0_SJW(btr0)           ((btr0) << 6)
    110 #define BTR0_BRP(btr0)           ((btr0) << 0)
    111 
    112 #define BTR1_SAMP                (1 << 7)
    113 #define BTR1_TSEG_22_20(btr1)    ((btr1) << 4)
    114 #define BTR1_TSEG_13_10(btr1)    ((btr1) << 0)
    115 
    116 #define RFLG_WUPIF               (1 << 7)
    117 #define RFLG_CSCIF               (1 << 6)
    118 #define RFLG_RSTAT               (3 << 4)
    119 #define RFLG_TSTAT               (3 << 2)
    120 #define RFLG_OVRIF               (1 << 1)
    121 #define RFLG_RXF                 (1 << 0)
    122 #define RFLG_GET_RX_STATE(rflg)  (((rflg) >> 4) & 0x03)
    123 #define RFLG_GET_TX_STATE(rflg)  (((rflg) >> 2) & 0x03)
    124 
    125 #define MSCAN_STATE_OK           0
    126 #define MSCAN_STATE_ERR          1
    127 #define MSCAN_STATE_WRN              2
    128 #define MSCAN_STATE_BUSOFF       3
    129 
    130 #define RIER_WUPIE               (1 << 7)
    131 #define RIER_CSCIE               (1 << 6)
    132 #define RIER_RSTAT(rier)         ((rier) << 4)
    133 #define RIER_TSTAT(rier)         ((rier) << 2)
    134 #define RIER_OVRIE               (1 << 1)
    135 #define RIER_RXFIE               (1 << 0)
    136 
    137 #define TFLG_TXE2                (1 << 2)
    138 #define TFLG_TXE1                (1 << 1)
    139 #define TFLG_TXE0                (1 << 0)
    140 
    141 #define TIER_TXEI2               (1 << 2)
    142 #define TIER_TXEI1               (1 << 1)
    143 #define TIER_TXEI0               (1 << 0)
    144 
    145 #define TARQ_ABTRQ2              (1 << 2)
    146 #define TARQ_ABTRQ1              (1 << 1)
    147 #define TARQ_ABTRQ0              (1 << 0)
    148 
    149 #define TAAK_ABTRQ2              (1 << 2)
    150 #define TAAK_ABTRQ1              (1 << 1)
    151 #define TAAK_ABTRQ0              (1 << 0)
    152 
    153 #define BSEL_TX2                 (1 << 2)
    154 #define BSEL_TX1                 (1 << 1)
    155 #define BSEL_TX0                 (1 << 0)
    156 
    157 #define IDAC_IDAM1               (1 << 5)
    158 #define IDAC_IDAM0               (1 << 4)
    159 #define IDAC_IDHIT(idac)         ((idac) & 0x7)
    160 
    161 #define TX_MBUF_SEL(buf_no)      (1 << (buf_no))
    162 #define TX_DATA_LEN(len)         ((len) & 0x0F)
    163 
    164 #define TX_MBUF_EMPTY(val)       (1 << (val))
    165 
    166 #define TXIDR1_IDE               (1 << 3)
    167 #define TXIDR1_SRR               (1 << 4)
    168 
    169 #define TXIDR3_RTR               (1 << 0)
    170 #define TXIDR1_RTR               (1 << 4)
    171 
    172 #define RXIDR1_IDE               (1 << 3)
    173 #define RXIDR1_SRR               (1 << 4)
    174 
    175 #define RXIDR3_RTR               (1 << 0)
    176 #define RXIDR1_RTR               (1 << 4)
    177 
    178 #define SET_IDR0(u16)            ((uint8_t)((u16) >> 3))
    179 #define SET_IDR1(u16)            ((uint8_t)(((u16) & 0x0007) << 5))
    180 
    181 #define SET_IDR2(u16)            SET_IDR0(u16)
    182 #define SET_IDR3(u16)            SET_IDR1(u16)
    183 
    184 #define SET_IDR4(u16)            SET_IDR0(u16)
    185 #define SET_IDR5(u16)            SET_IDR1(u16)
    186 
    187 #define SET_IDR6(u16)            SET_IDR0(u16)
    188 #define SET_IDR7(u16)            SET_IDR1(u16)
    189 
    190 #define GET_IDR0(u16)            ((uint16_t) ((u16) << 3))
    191 #define GET_IDR1(u16)            ((uint16_t)(((u16) >> 5)&0x0007))
    192 
    193 #define GET_IDR2(u16)            GET_IDR0(u16)
    194 #define GET_IDR3(u16)            GET_IDR1(u16)
    195 
    196 #define GET_IDR4(u16)            GET_IDR0(u16)
    197 #define GET_IDR5(u16)            GET_IDR1(u16)
    198 
    199 #define GET_IDR6(u16)            GET_IDR0(u16)
    200 #define GET_IDR7(u16)            GET_IDR1(u16)
    201 
    202 #define SET_IDMR0(u16)           ((uint8_t)((u16) >> 3))
    203 #define SET_IDMR1(u16)           ((uint8_t)((((u16) & 0x0007) << 5))|0x001F)
    204 
    205 #define SET_IDMR2(u16)           SET_IDMR0(u16)
    206 #define SET_IDMR3(u16)           SET_IDMR1(u16)
    207 
    208 #define SET_IDMR4(u16)           SET_IDMR0(u16)
    209 #define SET_IDMR5(u16)           SET_IDMR1(u16)
    210 
    211 #define SET_IDMR6(u16)           SET_IDMR0(u16)
    212 #define SET_IDMR7(u16)           SET_IDMR1(u16)
    213 
    214 #define GET_IDMR0(u16)           ((uint16_t) ((u16) << 3))
    215 #define GET_IDMR1(u16)           ((uint16_t)(((u16) >> 5)&0x0007))
    216 
    217 #define GET_IDMR2(u16)           GET_IDMR0(u16)
    218 #define GET_IDMR3(u16)           GET_IDMR1(u16)
    219 
    220 #define GET_IDMR4(u16)           GET_IDMR0(u16)
    221 #define GET_IDMR5(u16)           GET_IDMR1(u16)
    222 
    223 #define GET_IDMR6(u16)           GET_IDMR0(u16)
    224 #define GET_IDMR7(u16)           GET_IDMR1(u16)
    225 
    226 #define NO_OF_MSCAN_RX_BUFF      20
    227 #define MSCAN_MESSAGE_SIZE(size) (((size)%CPU_ALIGNMENT) ? (((size) + CPU_ALIGNMENT)-((size) + CPU_ALIGNMENT)%CPU_ALIGNMENT) : (size))
    228 
    229 #define TX_BUFFER_0              0
    230 #define TX_BUFFER_1              1
    231 #define TX_BUFFER_2              2
    232 
    233 #define RX_BUFFER_0              0
    234 #define RX_BUFFER_1              1
    235 #define RX_BUFFER_2              2
    236 #define RX_BUFFER_3              3
    237 
    238 #define NO_OF_MSCAN_TX_BUFF      20
    239 #define RING_BUFFER_EMPTY(rbuff) ((((rbuff)->head) == ((rbuff)->tail)) ? TRUE : FALSE)
    240 #define RING_BUFFER_FULL(rbuff)  ((((rbuff)->head) == ((rbuff)->tail)) ? TRUE : FALSE)
    241 
    242 
    243 typedef struct _mscan_handle
    244   {
    245   uint8_t mscan_channel;
    246   void (*toucan_callback)(int16_t);
    247   } mscan_handle;
    24852
    24953struct can_message
     
    25458  uint8_t  mess_data[MSCAN_MAX_DATA_BYTES];
    25559  uint8_t  mess_len;
    256   uint32_t toucan_tx_id;
    257   };
    258 
    259 struct ring_buf
    260     {
    261     struct can_message * volatile buf_ptr;
    262     struct can_message * volatile head_ptr;
    263     struct can_message * volatile tail_ptr;
    264     };
    265 
    266 struct mpc5200_rx_cntrl
    267   {
    268   struct can_message can_rx_message[MSCAN_RX_BUFF_NUM];
    269   };
    270 
    271 struct mscan_channel_info
    272   {
    273   volatile struct mpc5200_mscan *regs;
    274   uint32_t   int_rx_err;
    275   rtems_id   rx_qid;
    276   uint32_t   rx_qname;
    277   rtems_id   tx_rb_sid;
    278   uint32_t   tx_rb_sname;
    279   uint8_t    id_extended;
    280   uint8_t    mode;
    281   uint8_t    tx_buf_no;
    282   struct ring_buf tx_ring_buf;
     60  uint8_t  mess_rtr;
     61  uint32_t toucan_tx_idx;
    28362  };
    28463
     
    29372  {
    29473  struct can_message *tx_mess;
    295   uint32_t tx_id;
     74  uint32_t tx_idx;
    29675  };
    29776
     
    30584    void (*toucan_cb_fnc)(int16_t);
    30685  };
    307 
    308 
    309 extern void CanInterrupt_A(int16_t);
    310 extern void CanInterrupt_B(int16_t);
    31186
    31287
     
    346121    mscan_read, mscan_write, mscan_control }
    347122
    348 /*MSCAN driver internal functions */
    349 void mscan_hardware_initialize(rtems_device_major_number, uint32_t, void *);
    350 void mpc5200_mscan_int_enable(volatile struct mpc5200_mscan *);
    351 void mpc5200_mscan_int_disable(volatile struct mpc5200_mscan *);
    352 void mpc5200_mscan_enter_sleep_mode(volatile struct mpc5200_mscan *);
    353 void mpc5200_mscan_exit_sleep_mode(volatile struct mpc5200_mscan *);
    354 void mpc5200_mscan_enter_init_mode(volatile struct mpc5200_mscan *);
    355 void mpc5200_mscan_exit_init_mode(volatile struct mpc5200_mscan *);
    356 void mpc5200_mscan_wait_sync(volatile struct mpc5200_mscan *);
    357 void mpc5200_mscan_perform_init_mode_settings(volatile struct mpc5200_mscan *);
    358 void mpc5200_mscan_perform_normal_mode_settings(volatile struct mpc5200_mscan *);
    359 rtems_status_code mpc5200_mscan_set_mode(rtems_device_minor_number, uint8_t);
    360 rtems_status_code mscan_channel_initialize(rtems_device_major_number, rtems_device_minor_number);
    361 uint8_t prescaler_calculation(uint32_t, uint32_t, uint8_t *);
    362 void mpc5200_mscan_perform_bit_time_settings(volatile struct mpc5200_mscan *, uint32_t, uint32_t);
    363 
    364 
    365123#ifdef __cplusplus
    366124}
  • c/src/libchip/ide/ata.c

    rd761931e r36cb812  
    529529    ATA_EXEC_CALLBACK(areq, status, error);
    530530    Chain_Extract(&areq->link);
    531     free(areq);
    532531
    533532    if (!Chain_Is_empty(&ata_ide_ctrls[ctrl_minor].reqs))
    534533    {
    535534        ENABLE_PREEMPTION(key);
     535        free(areq);
    536536        ata_process_request(ctrl_minor);
    537537        return;
    538538    }
    539539    ENABLE_PREEMPTION(key);
     540    free(areq);
    540541}
    541542
  • cpukit/ChangeLog

    rd761931e r36cb812  
     12006-12-18      Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
     2
     3        * libblock/src/bdbuf.c:
     4        * libblock/include/bdbuf.h:
     5        export some internal variables to make them available in
     6        "show_bdbuf" monitor add-on
     7
    182006-12-13      Ralf Corsépius <ralf.corsepius@rtems.org>
    29
     
    1421        extern strdup.
    1522
     23>>>>>>> 1.696.2.26
    16242006-12-08      Ralf Corsépius <ralf.corsepius@rtems.org>
    1725
  • cpukit/libblock/Makefile.am

    rd761931e r36cb812  
    88if !UNIX
    99noinst_LIBRARIES = libblock.a
    10 libblock_a_SOURCES = src/bdbuf.c src/blkdev.c src/diskdevs.c src/ramdisk.c \
     10libblock_a_SOURCES = src/bdbuf.c src/blkdev.c src/diskdevs.c src/show_bdbuf.c \
     11                     src/ramdisk.c \
    1112    src/ide_part_table.c include/rtems/bdbuf.h include/rtems/blkdev.h \
    1213    include/rtems/diskdevs.h include/rtems/ramdisk.h \
  • cpukit/libblock/include/rtems/bdbuf.h

    rd761931e r36cb812  
    99 * Author: Victor V. Vengerov <vvv@oktet.ru>
    1010 *
    11  * @(#) $Id$
     11 * @(#) bdbuf.h,v 1.9 2005/02/02 00:06:18 joel Exp
    1212 */
    1313
     
    7575
    7676
     77/*
     78 * the following data structures are internal to the bdbuf layer,
     79 * but it is convenient to have them visible from the outside for inspection
     80 */
     81/*
     82 * The groups of the blocks with the same size are collected in the
     83 * bd_pool. Note that a several of the buffer's groups with the
     84 * same size can exists.
     85 */
     86typedef struct bdbuf_pool
     87{
     88    bdbuf_buffer *tree;         /* Buffer descriptor lookup AVL tree root */
     89
     90    Chain_Control free;         /* Free buffers list */
     91    Chain_Control lru;          /* Last recently used list */
     92
     93    int           blksize;      /* The size of the blocks (in bytes) */
     94    int           nblks;        /* Number of blocks in this pool */
     95    rtems_id      bufget_sema;  /* Buffer obtain counting semaphore */
     96    void         *mallocd_bufs; /* Pointer to the malloc'd buffer memory,
     97                                   or NULL, if buffer memory provided in
     98                                   buffer configuration */
     99    bdbuf_buffer *bdbufs;       /* Pointer to table of buffer descriptors
     100                                   allocated for this buffer pool. */
     101} bdbuf_pool;
     102
     103/* Buffering layer context definition */
     104struct bdbuf_context {
     105    bdbuf_pool    *pool;         /* Table of buffer pools */
     106    int            npools;       /* Number of entries in pool table */
     107
     108    Chain_Control  mod;          /* Modified buffers list */
     109    rtems_id       flush_sema;   /* Buffer flush semaphore; counting
     110                                    semaphore; incremented when buffer
     111                                    flushed to the disk; decremented when
     112                                    buffer modified */
     113    rtems_id       swapout_task; /* Swapout task ID */
     114};
     115  /*
     116   * the context of the buffering layer, visible for inspection
     117   */
     118extern struct bdbuf_context rtems_bdbuf_ctx;
    77119
    78120/* bdbuf_config structure describes block configuration (size,
  • cpukit/libblock/src/bdbuf.c

    rd761931e r36cb812  
    88 *         Alexander Kukuta <kam@oktet.ru>
    99 *
    10  * @(#) $Id$
     10 * @(#) bdbuf.c,v 1.14 2004/04/17 08:15:17 ralf Exp
    1111 */
    1212
     
    5757static rtems_status_code bdbuf_release(bdbuf_buffer *bd_buf);
    5858/*
    59  * The groups of the blocks with the same size are collected in the
    60  * bd_pool. Note that a several of the buffer's groups with the
    61  * same size can exists.
    62  */
    63 typedef struct bdbuf_pool
    64 {
    65     bdbuf_buffer *tree;         /* Buffer descriptor lookup AVL tree root */
    66 
    67     Chain_Control free;         /* Free buffers list */
    68     Chain_Control lru;          /* Last recently used list */
    69 
    70     int           blksize;      /* The size of the blocks (in bytes) */
    71     int           nblks;        /* Number of blocks in this pool */
    72     rtems_id      bufget_sema;  /* Buffer obtain counting semaphore */
    73     void         *mallocd_bufs; /* Pointer to the malloc'd buffer memory,
    74                                    or NULL, if buffer memory provided in
    75                                    buffer configuration */
    76     bdbuf_buffer *bdbufs;       /* Pointer to table of buffer descriptors
    77                                    allocated for this buffer pool. */
    78 } bdbuf_pool;
    79 
    80 /* Buffering layer context definition */
    81 struct bdbuf_context {
    82     bdbuf_pool    *pool;         /* Table of buffer pools */
    83     int            npools;       /* Number of entries in pool table */
    84 
    85     Chain_Control  mod;          /* Modified buffers list */
    86     rtems_id       flush_sema;   /* Buffer flush semaphore; counting
    87                                     semaphore; incremented when buffer
    88                                     flushed to the disk; decremented when
    89                                     buffer modified */
    90     rtems_id       swapout_task; /* Swapout task ID */
    91 };
    92 /*
    9359 * maximum number of blocks that might be chained together to one
    9460 * write driver call
     
    10975} blkdev_request1;
    11076
    111 /* The static context of buffering layer */
    112 static struct bdbuf_context bd_ctx;
     77/* The context of buffering layer */
     78struct bdbuf_context rtems_bdbuf_ctx;
    11379
    11480#define SAFE
     
    712678bdbuf_initialize_pool(rtems_bdbuf_config *config, int pool)
    713679{
    714     bdbuf_pool *p = bd_ctx.pool + pool;
     680    bdbuf_pool *p = rtems_bdbuf_ctx.pool + pool;
    715681    unsigned char *bufs;
    716682    bdbuf_buffer *b;
     
    788754bdbuf_release_pool(rtems_bdpool_id pool)
    789755{
    790     bdbuf_pool *p = bd_ctx.pool + pool;
     756    bdbuf_pool *p = rtems_bdbuf_ctx.pool + pool;
    791757    rtems_semaphore_delete(p->bufget_sema);
    792758    free(p->bdbufs);
     
    819785        return RTEMS_INVALID_SIZE;
    820786
    821     bd_ctx.npools = size;
     787    rtems_bdbuf_ctx.npools = size;
    822788
    823789    /*
    824790     * Allocate memory for buffer pool descriptors
    825791     */
    826     bd_ctx.pool = calloc(size, sizeof(bdbuf_pool));
    827     if (bd_ctx.pool == NULL)
     792    rtems_bdbuf_ctx.pool = calloc(size, sizeof(bdbuf_pool));
     793    if (rtems_bdbuf_ctx.pool == NULL)
    828794    {
    829795        return RTEMS_NO_MEMORY;
    830796    }
    831797
    832     Chain_Initialize_empty(&bd_ctx.mod);
     798    Chain_Initialize_empty(&rtems_bdbuf_ctx.mod);
    833799
    834800    /* Initialize buffer pools and roll out if something failed */
     
    852818        RTEMS_FIFO | RTEMS_COUNTING_SEMAPHORE | RTEMS_NO_INHERIT_PRIORITY |
    853819        RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL, 0,
    854         &bd_ctx.flush_sema);
     820        &rtems_bdbuf_ctx.flush_sema);
    855821    if (rc != RTEMS_SUCCESSFUL)
    856822    {
    857823        for (i = 0; i < size; i++)
    858824            bdbuf_release_pool(i);
    859         free(bd_ctx.pool);
     825        free(rtems_bdbuf_ctx.pool);
    860826        return rc;
    861827    }
     
    870836        RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
    871837        RTEMS_DEFAULT_ATTRIBUTES,
    872         &bd_ctx.swapout_task);
     838        &rtems_bdbuf_ctx.swapout_task);
    873839    if (rc != RTEMS_SUCCESSFUL)
    874840    {
    875         rtems_semaphore_delete(bd_ctx.flush_sema);
     841        rtems_semaphore_delete(rtems_bdbuf_ctx.flush_sema);
    876842        for (i = 0; i < size; i++)
    877843            bdbuf_release_pool(i);
    878         free(bd_ctx.pool);
     844        free(rtems_bdbuf_ctx.pool);
    879845        return rc;
    880846    }
    881847
    882     rc = rtems_task_start(bd_ctx.swapout_task, bdbuf_swapout_task, 0);
     848    rc = rtems_task_start(rtems_bdbuf_ctx.swapout_task, bdbuf_swapout_task, 0);
    883849    if (rc != RTEMS_SUCCESSFUL)
    884850    {
    885         rtems_task_delete(bd_ctx.swapout_task);
    886         rtems_semaphore_delete(bd_ctx.flush_sema);
     851        rtems_task_delete(rtems_bdbuf_ctx.swapout_task);
     852        rtems_semaphore_delete(rtems_bdbuf_ctx.flush_sema);
    887853        for (i = 0; i < size; i++)
    888854            bdbuf_release_pool(i);
    889         free(bd_ctx.pool);
     855        free(rtems_bdbuf_ctx.pool);
    890856        return rc;
    891857    }
     
    934900
    935901    device = dd->dev;
    936     bd_pool = bd_ctx.pool + dd->pool;
     902    bd_pool = rtems_bdbuf_ctx.pool + dd->pool;
    937903    blksize = dd->block_size;
    938904
     
    1022988            if (bd_buf->modified)
    1023989            {
    1024                 rc = rtems_semaphore_obtain(bd_ctx.flush_sema,
     990                rc = rtems_semaphore_obtain(rtems_bdbuf_ctx.flush_sema,
    1025991                                            RTEMS_NO_WAIT, 0);
    1026992            }
     
    14771443        return RTEMS_INTERNAL_ERROR;
    14781444
    1479     bd_pool = bd_ctx.pool + bd_buf->pool;
     1445    bd_pool = rtems_bdbuf_ctx.pool + bd_buf->pool;
    14801446
    14811447    bd_buf->use_count--;
     
    14881454            /* Buffer was modified. Insert buffer to the modified buffers
    14891455             * list and initiate flushing. */
    1490             Chain_Append(&bd_ctx.mod, &bd_buf->link);
     1456            Chain_Append(&rtems_bdbuf_ctx.mod, &bd_buf->link);
    14911457
    14921458            /* Release the flush_sema */
    1493             rc = rtems_semaphore_release(bd_ctx.flush_sema);
     1459            rc = rtems_semaphore_release(rtems_bdbuf_ctx.flush_sema);
    14941460        }
    14951461        else
     
    16601626        return RTEMS_INVALID_ID;
    16611627
    1662     pool = bd_ctx.pool + dd->pool;
     1628    pool = rtems_bdbuf_ctx.pool + dd->pool;
    16631629
    16641630    DISABLE_PREEMPTION(key);
     
    17191685           */
    17201686          if (nxt_bd_buf == NULL) {
    1721             rc = rtems_semaphore_obtain(bd_ctx.flush_sema,
     1687            rc = rtems_semaphore_obtain(rtems_bdbuf_ctx.flush_sema,
    17221688                                        (req.req.count == 0)
    17231689                                        ? RTEMS_WAIT
     
    17251691                                        0);
    17261692            if (rc == RTEMS_SUCCESSFUL) {
    1727               nxt_bd_buf = (bdbuf_buffer *)Chain_Get(&bd_ctx.mod);
     1693              nxt_bd_buf = (bdbuf_buffer *)Chain_Get(&rtems_bdbuf_ctx.mod);
    17281694          if (nxt_bd_buf != NULL) {
    17291695                nxt_bd_buf->in_progress = TRUE;
     
    17651731           */
    17661732          if (bd_buf != NULL) {
    1767             bd_pool = bd_ctx.pool + bd_buf->pool;
     1733            bd_pool = rtems_bdbuf_ctx.pool + bd_buf->pool;
    17681734            if (req.req.count == 0) {
    17691735              /*
     
    18191785              if (bd_buf->modified)
    18201786                {
    1821                   Chain_Append(&bd_ctx.mod, &bd_buf->link);
    1822                   rc = rtems_semaphore_release(bd_ctx.flush_sema);
     1787                  Chain_Append(&rtems_bdbuf_ctx.mod, &bd_buf->link);
     1788                  rc = rtems_semaphore_release(rtems_bdbuf_ctx.flush_sema);
    18231789                }
    18241790              else
     
    18611827        return RTEMS_INVALID_SIZE;
    18621828
    1863     for (i = 0, p = bd_ctx.pool; i < bd_ctx.npools; i++, p++)
     1829    for (i = 0, p = rtems_bdbuf_ctx.pool; i < rtems_bdbuf_ctx.npools; i++, p++)
    18641830    {
    18651831        if ((p->blksize >= block_size) &&
     
    19041870                          int *blocks)
    19051871{
    1906     if (pool >= bd_ctx.npools)
     1872    if (pool >= rtems_bdbuf_ctx.npools)
    19071873        return RTEMS_INVALID_NUMBER;
    19081874
    19091875    if (block_size != NULL)
    19101876    {
    1911         *block_size = bd_ctx.pool[pool].blksize;
     1877        *block_size = rtems_bdbuf_ctx.pool[pool].blksize;
    19121878    }
    19131879
    19141880    if (blocks != NULL)
    19151881    {
    1916         *blocks = bd_ctx.pool[pool].nblks;
     1882        *blocks = rtems_bdbuf_ctx.pool[pool].nblks;
    19171883    }
    19181884
  • testsuites/samples/ChangeLog

    rd761931e r36cb812  
     12006-12-18      Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
     2
     3        * init.c: added stdout flushs after prompts
     4
    152006-12-02      Ralf Corsépius <ralf.corsepius@rtems.org>
    26
  • testsuites/samples/fileio/init.c

    rd761931e r36cb812  
    130130  fileio_print_free_heap();
    131131  printf(" Enter device to initialize ==>");
     132  fflush(stdout);
    132133  fgets(devname,sizeof(devname)-1,stdin);
    133134  while (devname[strlen(devname)-1] == '\n') {
     
    176177  fileio_print_free_heap();
    177178  printf(" Enter filename to list ==>");
     179  fflush(stdout);
    178180  fgets(fname,sizeof(fname)-1,stdin);
    179181  while (fname[strlen(fname)-1] == '\n') {
     
    282284  if (!failed) {
    283285    printf("Enter path/filename ==>");
     286    fflush(stdout);
    284287    fgets(fname,sizeof(fname)-1,stdin);
    285288    while (fname[strlen(fname)-1] == '\n') {
     
    297300    printf("use suffix K for Kbytes, M for Mbytes or no suffix for bytes:\n"
    298301           "Enter filesize to write ==>");
     302    fflush(stdout);
    299303    fgets(tmp_str,sizeof(tmp_str)-1,stdin);
    300304    failed = fileio_str2size(tmp_str,&file_size);
     
    309313    printf("use suffix K for Kbytes, M for Mbytes or no suffix for bytes:\n"
    310314           "Enter block size to use for write calls ==>");
     315    fflush(stdout);
    311316    fgets(tmp_str,sizeof(tmp_str)-1,stdin);
    312317    failed = fileio_str2size(tmp_str,&buf_size);
     
    438443  if (!failed) {
    439444    printf("Enter path/filename ==>");
     445    fflush(stdout);
    440446    fgets(fname,sizeof(fname)-1,stdin);
    441447    while (fname[strlen(fname)-1] == '\n') {
     
    453459    printf("use suffix K for Kbytes, M for Mbytes or no suffix for bytes:\n"
    454460           "Enter block size to use for read calls ==>");
     461    fflush(stdout);
    455462    fgets(tmp_str,sizeof(tmp_str)-1,stdin);
    456463    failed = fileio_str2size(tmp_str,&buf_size);
     
    550557#endif
    551558    printf("   Enter your selection ==>");
     559    fflush(stdout);
    552560
    553561    inbuf[0] = '\0';
Note: See TracChangeset for help on using the changeset viewer.