1 /*
2  * mbx-outbyte.c -- outbyte function for targets using the eppcbug monitor
3  *
4  * Copyright (c) 1998 Cygnus Support
5  *
6  * The authors hereby grant permission to use, copy, modify, distribute,
7  * and license this software and its documentation for any purpose, provided
8  * that existing copyright notices are retained in all copies and that this
9  * notice is included verbatim in any distributions. No written agreement,
10  * license, or royalty fee is required for any of the authorized uses.
11  * Modifications to this software may be copyrighted by their authors
12  * and need not follow the licensing terms described here, provided that
13  * the new terms are clearly indicated on the first page of each file where
14  * they apply.
15  */
16 
17 #include "ppc-asm.h"
18 
sendbyte(char c)19 static int sendbyte(char c)
20 {
21     struct {
22 	unsigned clun;
23 	unsigned dlun;
24 	char     *data;
25 	unsigned len;
26 	unsigned rsrvd;
27 	char     buf[4];
28     } ipb, *inpb;
29 
30     struct {
31 	int status;
32 	int cnt;
33     } opb, *outpb;
34 
35     inpb = &ipb;
36     outpb = &opb;
37 
38     inpb->clun = 0;
39     inpb->dlun = 0;
40     inpb->data = ipb.buf;
41     inpb->len  = 1;
42     inpb->rsrvd = 0;
43     inpb->buf[0] = c;
44 
45     asm volatile (
46         "mr  3,%0\n"
47         "mr  4,%1\n"
48         "li  10,0x201\n"
49 	"sc"
50 	: /* no outputs */
51 	: "r" (inpb), "r" (outpb)
52 	: "3", "4", "10"
53     );
54 
55     return (outpb->status == 0 && outpb->cnt == 1);
56 }
57 
58 #define GDB_QUOTE_OUTBYTES 1
59 
outbyte(char c)60 void outbyte(char c)
61 {
62 #ifdef GDB_QUOTE_OUTBYTES
63     /*
64      *  GDB monitor.c will echo characters quoted with ^O
65      */
66     while (!sendbyte('\017')) ;
67 #endif
68     while (!sendbyte(c)) ;
69 }
70 
71 
72