fixes for pin-cir support

This commit is contained in:
NIIBE Yutaka 2013-11-02 14:33:34 +09:00
parent 95587b8cae
commit 95eb208d71
9 changed files with 66 additions and 24 deletions

View File

@ -1,5 +1,15 @@
2013-11-02 Niibe Yutaka <gniibe@fsij.org>
* chopstx: Update.
* src/configure (TIM_SIZE, EXT_SIZE): New.
* src/gnuk.ld.in (__process6_stack_size__)
(__process7_stack_size__): New.
* src/main.c (main): Call cir_init.
* src/openpgp.c (openpgp_card_thread): Rename from GPGthread.
* src/usb-icc.c (icc_power_on): Follow the change.
2013-11-01 Niibe Yutaka <gniibe@fsij.org>
* src/sys.c: Update from Chopstx.
* src/usb_lld.h: Remove interrupt definition.
* src/stm32f103.h: Add AFIO, EXTI, and TIMER constants.

@ -1 +1 @@
Subproject commit 5f14824977c1b7f281aa0b31cc8dbf93a649b504
Subproject commit 9fe6cefdc0564b6bb3d938c0c1074d57a4b9500f

7
src/configure vendored
View File

@ -167,6 +167,8 @@ fi
# --enable-pinpad option
MSC_SIZE="0"
TIM_SIZE="0"
EXT_SIZE="0"
if test "$pinpad" = "no"; then
PINPAD_MAKE_OPTION="# ENABLE_PINPAD="
PINPAD_DEFINE="#undef PINPAD_SUPPORT"
@ -179,6 +181,9 @@ else
echo "PIN pad option enabled ($pinpad)"
if test "$pinpad" = "dnd"; then
MSC_SIZE="0x0200"
elif test "$pinpad" = "cir"; then
TIM_SIZE="0x00c0"
EXT_SIZE="0x00c0"
fi
fi
@ -291,6 +296,8 @@ else
-e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
-e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
-e "s/@MSC_SIZE@/$MSC_SIZE/" \
-e "s/@TIM_SIZE@/$TIM_SIZE/" \
-e "s/@EXT_SIZE@/$EXT_SIZE/" \
< gnuk.ld.in > gnuk.ld
fi
sed -e "s/@DEBUG_DEFINE@/$DEBUG_DEFINE/" \

View File

@ -18,14 +18,14 @@ struct apdu {
extern struct apdu apdu;
#define EV_EXEC_FINISHED ((eventmask_t)2) /* GPG Execution finished */
#define EV_EXEC_FINISHED (2) /* OpenPGPcard Execution finished */
/* GPG thread */
#define EV_PINPAD_INPUT_DONE ((eventmask_t)1)
#define EV_EXIT ((eventmask_t)2)
#define EV_CMD_AVAILABLE ((eventmask_t)4)
#define EV_VERIFY_CMD_AVAILABLE ((eventmask_t)8)
#define EV_MODIFY_CMD_AVAILABLE ((eventmask_t)16)
/* OpenPGPcard thread */
#define EV_PINPAD_INPUT_DONE (1)
#define EV_EXIT (2)
#define EV_CMD_AVAILABLE (4)
#define EV_VERIFY_CMD_AVAILABLE (8)
#define EV_MODIFY_CMD_AVAILABLE (16)
/* Maximum cmd apdu data is key import 22+4+128+128 (proc_key_import) */
#define MAX_CMD_APDU_DATA_SIZE (22+4+128+128) /* without header */
@ -353,18 +353,17 @@ extern void flash_do_write_internal (const uint8_t *p, int nr, const uint8_t *da
extern const uint8_t gnukStringSerial[];
#define LED_ONESHOT ((eventmask_t)1)
#define LED_TWOSHOTS ((eventmask_t)2)
#define LED_SHOW_STATUS ((eventmask_t)4)
#define LED_START_COMMAND ((eventmask_t)8)
#define LED_FINISH_COMMAND ((eventmask_t)16)
#define LED_FATAL ((eventmask_t)32)
#define LED_ONESHOT (1)
#define LED_TWOSHOTS (2)
#define LED_SHOW_STATUS (4)
#define LED_START_COMMAND (8)
#define LED_FINISH_COMMAND (16)
#define LED_FATAL (32)
extern void led_blink (int spec);
#if defined(PINPAD_SUPPORT)
# if defined(PINPAD_CIR_SUPPORT)
extern void cir_ext_disable (void);
extern void cir_ext_enable (void);
extern void cir_init (void);
# elif defined(PINPAD_DIAL_SUPPORT)
extern void dial_sw_disable (void);
extern void dial_sw_enable (void);

View File

@ -7,7 +7,9 @@ __process1_stack_size__ = 0x0140; /* ccid */
__process2_stack_size__ = 0x0180; /* rng */
__process3_stack_size__ = 0x0b00; /* gpg */
__process4_stack_size__ = 0x0100; /* intr: usb */
__process5_stack_size__ = @MSC_SIZE@; /* msc */
__process5_stack_size__ = @MSC_SIZE@; /* msc */
__process6_stack_size__ = @TIM_SIZE@; /* intr: timer */
__process7_stack_size__ = @EXT_SIZE@; /* intr: ext */
MEMORY
{
@ -112,6 +114,14 @@ SECTIONS
. += __process5_stack_size__;
. = ALIGN(8);
__process5_stack_end__ = .;
__process6_stack_base__ = .;
. += __process6_stack_size__;
. = ALIGN(8);
__process6_stack_end__ = .;
__process7_stack_base__ = .;
. += __process7_stack_size__;
. = ALIGN(8);
__process7_stack_end__ = .;
. = ALIGN(8);
} > ram

View File

@ -330,6 +330,9 @@ main (int argc, char *argv[])
ccid_thd = chopstx_create (PRIO_CCID, __stackaddr_ccid,
__stacksize_ccid, USBthread, NULL);
#ifdef PINPAD_CIR_SUPPORT
cir_init ();
#endif
#ifdef PINPAD_DND_SUPPORT
msc_init ();
#endif

View File

@ -1215,10 +1215,24 @@ process_command_apdu (void)
}
}
void *
GPGthread (void *arg)
static void * card_thread (chopstx_t thd, struct eventflag *ccid_comm);
void * __attribute__ ((naked))
openpgp_card_thread (void *arg)
{
struct eventflag *ccid_comm = (struct eventflag *)arg;
chopstx_t thd;
asm ("mov %0, sp" : "=r" (thd));
return card_thread (thd, (struct eventflag *)arg);
}
chopstx_t openpgp_card_thd;
static void *
card_thread (chopstx_t thd, struct eventflag *ccid_comm)
{
openpgp_card_thd = thd;
openpgp_comm = ccid_comm + 1;
gpg_init ();

View File

@ -24,7 +24,6 @@
#include <stdint.h>
#include <string.h>
#include <chopstx.h>
#include <eventflag.h>
#include "config.h"
#include "board.h"

View File

@ -742,7 +742,7 @@ static void icc_error (struct ccid *c, int offset)
usb_lld_write (c->epi->ep_num, icc_reply, ICC_MSG_HEADER_SIZE);
}
extern void *GPGthread (void *arg);
extern void *openpgp_card_thread (void *arg);
extern uint8_t __process3_stack_base__, __process3_stack_size__;
const uint32_t __stackaddr_gpg = (uint32_t)&__process3_stack_base__;
@ -759,8 +759,8 @@ icc_power_on (struct ccid *c)
if (c->application == 0)
c->application = chopstx_create (PRIO_GPG, __stackaddr_gpg,
__stacksize_gpg,
GPGthread, (void *)&c->ccid_comm);
__stacksize_gpg, openpgp_card_thread,
(void *)&c->ccid_comm);
p[0] = ICC_DATA_BLOCK_RET;
p[1] = size_atr;