aboutsummaryrefslogtreecommitdiffstats
path: root/lib/lufa/Projects/XPLAINBridge/XPLAINBridge.h
blob: cc7d5b4997c0d2b104ea7ba1712ea0e273007537 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
             LUFA Library
     Copyright (C) Dean Camera, 2017.

  dean [at] fourwalledcubicle [dot] com
           www.lufa-lib.org
*/

/*
  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)

  Permission to use, copy, modify, distribute, and sell this
  software and its documentation for any purpose is hereby granted
  without fee, provided that the above copyright notice appear in
  all copies and that both that the copyright notice and this
  permission notice and warranty disclaimer appear in supporting
  documentation, and that the name of the author not be used in
  advertising or publicity pertaining to distribution of the
  software without specific, written prior permission.

  The author disclaims all warranties with regard to this
  software, including all implied warranties of merchantability
  and fitness.  In no event shall the author be liable for any
  special, indirect or consequential damages or any damages
  whatsoever resulting from loss of use, data or profits, whether
  in an action of contract, negligence or other tortious action,
  arising out of or in connection with the use or performance of
  this software.
*/

/** \file
 *
 *  Header file for XPLAINBridge.c.
 */

#ifndef _XPLAIN_BRIDGE_H_
#define _XPLAIN_BRIDGE_H_

	/* Includes: */
		#include <avr/io.h>
		#include <avr/wdt.h>
		#include <avr/power.h>
		#include <avr/interrupt.h>
		#include <util/delay.h>

		#include "USARTDescriptors.h"

		#include "AVRISPDescriptors.h"
		#include "Lib/V2Protocol.h"
		#include "Lib/SoftUART.h"
		#include "Config/AppConfig.h"

		#include <LUFA/Drivers/Board/LEDs.h>
		#include <LUFA/Drivers/Misc/RingBuffer.h>
		#include <LUFA/Drivers/USB/USB.h>
		#include <LUFA/Platform/Platform.h>

	/* Macros: */
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
		#define LEDMASK_USB_NOTREADY     LEDS_LED1

		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
		#define LEDMASK_USB_ENUMERATING  LEDS_LED1

		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
		#define LEDMASK_USB_READY        LEDS_NO_LEDS

		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
		#define LEDMASK_USB_ERROR        LEDS_LED1

		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
		#define LEDMASK_BUSY             LEDS_LED1

		/** Firmware mode define for the USART Bridge mode. */
		#define MODE_USART_BRIDGE        false

		/** Firmware mode define for the AVRISP Programmer mode. */
		#define MODE_PDI_PROGRAMMER      true

	/* External Variables: */
		extern bool         CurrentFirmwareMode;
		extern RingBuffer_t UARTtoUSB_Buffer;
		extern RingBuffer_t USBtoUART_Buffer;

	/* Function Prototypes: */
		void SetupHardware(void);
		void AVRISP_Task(void);
		void UARTBridge_Task(void);

		void EVENT_USB_Device_ConfigurationChanged(void);
		void EVENT_USB_Device_ControlRequest(void);
		void EVENT_USB_Device_Connect(void);
		void EVENT_USB_Device_Disconnect(void);

		void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);

		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
		                                    const uint16_t wIndex,
		                                    const void** const DescriptorAddress)
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);

#endif
nl">qp:6, btype:3, un3:3, p:1, b2:3, un11:11, x6:6, wh:2, d:1, un1:1, major:4; }; } INST64_B4; typedef union U_INST64_B8 { IA64_INST inst; struct { unsigned long qp:6, un21:21, x6:6, un4:4, major:4; }; } INST64_B8; typedef union U_INST64_B9 { IA64_INST inst; struct { unsigned long qp:6, imm20:20, :1, x6:6, :3, i:1, major:4; }; } INST64_B9; typedef union U_INST64_I19 { IA64_INST inst; struct { unsigned long qp:6, imm20:20, :1, x6:6, x3:3, i:1, major:4; }; } INST64_I19; typedef union U_INST64_I26 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, ar3:7, x6:6, x3:3, :1, major:4;}; } INST64_I26; typedef union U_INST64_I27 { IA64_INST inst; struct { unsigned long qp:6, :7, imm:7, ar3:7, x6:6, x3:3, s:1, major:4;}; } INST64_I27; typedef union U_INST64_I28 { // not privileged (mov from AR) IA64_INST inst; struct { unsigned long qp:6, r1:7, :7, ar3:7, x6:6, x3:3, :1, major:4;}; } INST64_I28; typedef union U_INST64_M28 { IA64_INST inst; struct { unsigned long qp:6, :14, r3:7, x6:6, x3:3, :1, major:4;}; } INST64_M28; typedef union U_INST64_M29 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, ar3:7, x6:6, x3:3, :1, major:4;}; } INST64_M29; typedef union U_INST64_M30 { IA64_INST inst; struct { unsigned long qp:6, :7, imm:7, ar3:7,x4:4,x2:2,x3:3,s:1,major:4;}; } INST64_M30; typedef union U_INST64_M31 { IA64_INST inst; struct { unsigned long qp:6, r1:7, :7, ar3:7, x6:6, x3:3, :1, major:4;}; } INST64_M31; typedef union U_INST64_M32 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, cr3:7, x6:6, x3:3, :1, major:4;}; } INST64_M32; typedef union U_INST64_M33 { IA64_INST inst; struct { unsigned long qp:6, r1:7, :7, cr3:7, x6:6, x3:3, :1, major:4; }; } INST64_M33; typedef union U_INST64_M35 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, :7, x6:6, x3:3, :1, major:4; }; } INST64_M35; typedef union U_INST64_M36 { IA64_INST inst; struct { unsigned long qp:6, r1:7, :14, x6:6, x3:3, :1, major:4; }; } INST64_M36; typedef union U_INST64_M37 { IA64_INST inst; struct { unsigned long qp:6, imm20a:20,:1, x4:4,x2:2,x3:3, i:1, major:4; }; } INST64_M37; typedef union U_INST64_M41 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, :7, x6:6, x3:3, :1, major:4; }; } INST64_M41; typedef union U_INST64_M42 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, r3:7, x6:6, x3:3, :1, major:4; }; } INST64_M42; typedef union U_INST64_M43 { IA64_INST inst; struct { unsigned long qp:6, r1:7, :7, r3:7, x6:6, x3:3, :1, major:4; }; } INST64_M43; typedef union U_INST64_M44 { IA64_INST inst; struct { unsigned long qp:6, imm:21, x4:4, i2:2, x3:3, i:1, major:4; }; } INST64_M44; typedef union U_INST64_M45 { IA64_INST inst; struct { unsigned long qp:6, :7, r2:7, r3:7, x6:6, x3:3, :1, major:4; }; } INST64_M45; typedef union U_INST64_M46 { IA64_INST inst; struct { unsigned long qp:6, r1:7, un7:7, r3:7, x6:6, x3:3, un1:1, major:4; }; } INST64_M46; typedef union U_INST64_M47 { IA64_INST inst; struct { unsigned long qp:6, un14:14, r3:7, x6:6, x3:3, un1:1, major:4; }; } INST64_M47; typedef union U_INST64_M1{ IA64_INST inst; struct { unsigned long qp:6, r1:7, un7:7, r3:7, x:1, hint:2, x6:6, m:1, major:4; }; } INST64_M1; typedef union U_INST64_M2{ IA64_INST inst; struct { unsigned long qp:6, r1:7, r2:7, r3:7, x:1, hint:2, x6:6, m:1, major:4; }; } INST64_M2; typedef union U_INST64_M3{ IA64_INST inst; struct { unsigned long qp:6, r1:7, imm7:7, r3:7, i:1, hint:2, x6:6, s:1, major:4; }; } INST64_M3; typedef union U_INST64_M4 { IA64_INST inst; struct { unsigned long qp:6, un7:7, r2:7, r3:7, x:1, hint:2, x6:6, m:1, major:4; }; } INST64_M4; typedef union U_INST64_M5 { IA64_INST inst; struct { unsigned long qp:6, imm7:7, r2:7, r3:7, i:1, hint:2, x6:6, s:1, major:4; }; } INST64_M5; typedef union U_INST64_M6 { IA64_INST inst; struct { unsigned long qp:6, f1:7, un7:7, r3:7, x:1, hint:2, x6:6, m:1, major:4; }; } INST64_M6; typedef union U_INST64_M9 { IA64_INST inst; struct { unsigned long qp:6, :7, f2:7, r3:7, x:1, hint:2, x6:6, m:1, major:4; }; } INST64_M9; typedef union U_INST64_M10 { IA64_INST inst; struct { unsigned long qp:6, imm7:7, f2:7, r3:7, i:1, hint:2, x6:6, s:1, major:4; }; } INST64_M10; typedef union U_INST64_M12 { IA64_INST inst; struct { unsigned long qp:6, f1:7, f2:7, r3:7, x:1, hint:2, x6:6, m:1, major:4; }; } INST64_M12; typedef union U_INST64_M15 { IA64_INST inst; struct { unsigned long qp:6, :7, imm7:7, r3:7, i:1, hint:2, x6:6, s:1, major:4; }; } INST64_M15; typedef union U_INST64 { IA64_INST inst; struct { unsigned long :37, major:4; } generic; INST64_A5 A5; // used in build_hypercall_bundle only INST64_B4 B4; // used in build_hypercall_bundle only INST64_B8 B8; // rfi, bsw.[01] INST64_B9 B9; // break.b INST64_I19 I19; // used in build_hypercall_bundle only INST64_I26 I26; // mov register to ar (I unit) INST64_I27 I27; // mov immediate to ar (I unit) INST64_I28 I28; // mov from ar (I unit) INST64_M1 M1; // ld integer INST64_M2 M2; INST64_M3 M3; INST64_M4 M4; // st integer INST64_M5 M5; INST64_M6 M6; // ldfd floating pointer INST64_M9 M9; // stfd floating pointer INST64_M10 M10; // stfd floating pointer INST64_M12 M12; // ldfd pair floating pointer INST64_M15 M15; // lfetch + imm update INST64_M28 M28; // purge translation cache entry INST64_M29 M29; // mov register to ar (M unit) INST64_M30 M30; // mov immediate to ar (M unit) INST64_M31 M31; // mov from ar (M unit) INST64_M32 M32; // mov reg to cr INST64_M33 M33; // mov from cr INST64_M35 M35; // mov to psr INST64_M36 M36; // mov from psr INST64_M37 M37; // break.m INST64_M41 M41; // translation cache insert INST64_M42 M42; // mov to indirect reg/translation reg insert INST64_M43 M43; // mov from indirect reg INST64_M44 M44; // set/reset system mask INST64_M45 M45; // translation purge INST64_M46 M46; // translation access (tpa,tak) INST64_M47 M47; // purge translation entry } INST64; #ifdef __XEN__ extern unsigned long __vmx_get_domain_bundle(unsigned long iip, IA64_BUNDLE *pbundle); extern IA64_BUNDLE __get_domain_bundle(unsigned long iip); #endif #define MASK_41 ((unsigned long)0x1ffffffffff) #endif /* _XEN_IA64_BUNDLE_H */