From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4450 invoked by alias); 8 Dec 2008 11:01:50 -0000 Received: (qmail 4230 invoked by uid 22791); 8 Dec 2008 11:01:47 -0000 X-Spam-Level: * X-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_05,J_CHICKENPOX_43,SPF_PASS X-Spam-Check-By: sourceware.org Received: from cheviot20.ncl.ac.uk (HELO cheviot20.ncl.ac.uk) (128.240.234.20) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 08 Dec 2008 11:01:07 +0000 Received: from cheviot20.ncl.ac.uk (localhost.localdomain [127.0.0.1]) by cheviot20.ncl.ac.uk (8.13.8/8.13.8) with SMTP id mB8B13Xn030797 for ; Mon, 8 Dec 2008 11:01:03 GMT Received: from largo.campus.ncl.ac.uk (largo.ncl.ac.uk [10.8.234.184]) by cheviot20.ncl.ac.uk (cheviot20.ncl.ac.uk [128.240.234.73]) id kB7B130314116734nJ ret-id none; Mon, 08 Dec 2008 11:01:03 +0000 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C95924.3F77AB18" Subject: RE: mpc555 serial driver hardware queue support Date: Mon, 08 Dec 2008 11:01:00 -0000 Message-ID: In-Reply-To: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: mpc555 serial driver hardware queue support Thread-Index: AckQzNn1tRctSfDRTqyx/9TXQLDUixIVQCEQ From: "Steven Clugston" To: X-smtpf-Report: client=lan,relay,white,ipv6; mail=; rcpt=white X-Virus-Checked: Checked by ClamAV on sourceware.org Mailing-List: contact ecos-patches-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: ecos-patches-owner@ecos.sourceware.org X-SW-Source: 2008-12/txt/msg00021.txt.bz2 This is a multi-part message in MIME format. ------_=_NextPart_001_01C95924.3F77AB18 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable Content-length: 5314 -----Original Message----- From: Andrew Lunn [mailto:andrew@lunn.ch]=20 Sent: 07 September 2008 10:34 To: Steven Clugston Subject: Re: mpc555 serial driver hardware queue support On Fri, Sep 05, 2008 at 02:07:01PM +0100, Steven Clugston wrote: >=20 > -----Original Message----- > From: Andrew Lunn [mailto:andrew@lunn.ch] > Sent: 05 September 2008 07:26 > To: Steven Clugston > Subject: Re: mpc555 serial driver hardware queue support >=20 >=20 > >> I've run out of time today, so I'll pick this up tomorrow and > >> hopefully resolve it. >=20 > >No rush. Take your time. Look how long it took me to pick up this > thread after your assignment took place. > > > > Andrew >=20 >=20 > Andrew, >=20 > I've made the common ISR change and tested it. Also new in this diff=20 > I've modified var_intr.h to correct the interrupt priority defines.=20 > I've checked in the hardware manual to confirm that the lowest=20 > interrupt number does infact have the highest priority. There are some > asserts which where inconsistent with this which I've corrected as=20 > well. > I have some new problems now. Attached is the file mpc555_serial_with_ints.c. It contains your patch plus i wrapped a lot of the long lines. I personally don't like lines longer than 80 characters. > > I then started compiler testing. I picked an arbitrary target which uses this driver, the ec555. > > rm -fr * > ecosconfig new ec555 > emacs ecos.ecc and set CYGPKG_IO_SERIAL_DEVICES to 1 > ecosconfig tree > make -s > headers finished > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c: In function `mpc555_serial_start_xmit': > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:772: structure has no member named `data_xmt_req' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:790: structure has no member named `data_xmt_done' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c: In function `mpc555_serial_common_ISR': > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:860: warning: unused variable `mpc555_chan' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c: In function `mpc555_serial_tx_queue_DSR': > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1005: structure has no member named `data_xmt_req' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1016: structure has no member named `data_xmt_done' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1040: structure has no member named `data_xmt_done' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c: In function `mpc555_serial_rx_queue_DSR': > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1073: warning: unused variable `qscicr' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1089: warning: unused variable `space_avail' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c: In function `mpc555_serial_read_queue': > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1216: structure has no member named `data_rcv_req' > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:1229: structure has no member named `data_rcv_done' > /home/lunn/eCos/work/install/include/cyg/hal/hal_arbiter.h: At top level: > /home/lunn/eCos/anoncvs-clean/packages/devs/serial/powerpc/mpc555/curren t/src/mpc555_serial_with_ints.c:846: warning: `mpc555_serial_tx_ISR' defined but not used > > The first error is because you use the callback data_xmt_req. This only exists when using block transfers. If CYGINT_IO_SERIAL_BLOCK_TRANSFER is disabled, >which is the default, this does not exist. > > Please could you do some more testing with other configurations and fix any problems you find. > > Thanks > Andrew Hi Andrew There was a condition where it was possible in cdl to select the hardware serial drivers package but not actually select either of the two serial devices so CYGINT_IO_SERIAL_BLOCK_TRANSFER was never set. Although this is not a useful selection it is still possible, so I have #ifdef'd the relevant places to prevent compile errors. I've also added a trivial fix to re-enable the serial hardware queue after a frame error occurs which happens repeatably when something is sent at the wrong baud rate. I've tested various permutations of different configurations and all seem to compile and run on my board. I've wrapped most of the long lines where it is not completely detremental to code readability. I also dislike sprawling code that's over 80 chars long, but I was trying to respect the original code style, or minimise the changes to it. Is there an official, or defacto eCos code style? Thanks, Steven ------_=_NextPart_001_01C95924.3F77AB18 Content-Type: application/x-gzip; name="mpc555_serial.tar.gz" Content-Transfer-Encoding: base64 Content-Description: mpc555_serial.tar.gz Content-Disposition: attachment; filename="mpc555_serial.tar.gz" Content-length: 15917 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 /eE7zCBNc5DZkYUrv7QnhkdpLi6lXnQ9nCxwOwlMfY7PS9wZS7wKvoUHr7LO iPoQe4HFHmCCfMMg/V45fFtj5/j5PEdsheGnEOj0rcjMTlD4kb1bES4yFtdR m74OuEpAJQezgW+KIfMbW8P2yGe32mZ7IT/6jH1b6UFfyF1cAPYcXI0VMZfP dEy7UqOy0J8lN5qiTLr7r4KEybEu2FA7SKMcqx3AYGZ2eO0K+zKJZfarMU1s 5gdxisvueeBCxRi2b2I5AlVCkww3VzMjb8+Bkw0eqOx2HJXkrh2N8NrBwTGq LXTXgi0VxxGfZ4RezEtSIltbbkYSWdS2Qz3K5l8kWtwFRRh1pfSe4rqKOt/Q e6J5QpGuO1JCd+ikPOaNnsL4VWYcjJ5nLhTnGuRuWrfF1Gg1XXZBNUrNhF1S jQr2u11KW+xS2pKSp3YXFEW1JaX5TSiENmzu5wD+w4NMosMIFlPSBN96XjG4 n9AcpuTi3sU8ZqWh/vzmMpGmr4ThDBOylbB92Ql2HwZZCZOaTRIuH+2sUInE 7Lsr1HpO8t0U6kF0yc+y+Fl0KS0x8sMgK61LaSRFyGKmDVz06lraDo54PYn/ Ln45I339ZzZfq1lGS3jy0iq3MT/4wyAr4eM3mi8f2c5KFf+qw+5KtfY9gy9F qUrasQdRqoewY+nISitVPjtWQqkSn07ZRZ/Wvxfy+VUpkev3E6tS6vcndsZT ZuaRRojYjmPR6QT0gV4sH6VYF/40q7r0iUHb8lzxIQ6mitUr+gRQLEsuvPkO b+1z7TvmLVlFr/M6E0yLE/MPTNlfJX8/LR7nXzuuPMYV52j5+OCgzPJsvtXZ aNugP7zoS9JHU7ExJpxQSCyK6ooPTsVUC3Rv6bl+ita6SNNMZP2Aiv8DLlxG oDqe6DVdcemANuQ/4R2DIp/12O3Q/+rif4ET/3trn7tbO36v2anXRDM2re7o Wpjqb3Lqswr+zR6lbvvSdSfcaqNr9dc19n/tHWtz2khyvx6/Ys65usMbjI2d h2NvcgUYEmoTIICTy+2mKCwJWxVAnCTiuHb936+7Z0YavUAS2HG2UFVwEJrR TE9Pv6f72uAFdZ05FbIVlXCvDGVJMfxKIKKz0ACDHeFu020WjKPRsnnbvp3R wHXpwAuQU/QeSvehdIh+NNA0SAfF1Iq9rjgkBYMt+T4Uc7KwDbVf4Va5K++b 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 ------_=_NextPart_001_01C95924.3F77AB18--