blob: 964f11fd0091662d8b220e48b0326a6a7a2976b6 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#define NB_MAGIC 0xAA774217
#define NB_SERVER_PORT 33330
#define NB_ADVERT_PORT 33331
#define NB_COMMAND 1 // arg=0, data=command
#define NB_SEND_FILE 2 // arg=0, data=filename
#define NB_DATA 3 // arg=blocknum, data=data
#define NB_BOOT 4 // arg=0
#define NB_ACK 0
#define NB_ADVERTISE 0x77777777
#define NB_ERROR 0x80000000
#define NB_ERROR_BAD_CMD 0x80000001
#define NB_ERROR_BAD_PARAM 0x80000002
#define NB_ERROR_TOO_LARGE 0x80000003
#define NB_ERROR_BAD_FILE 0x80000004
typedef struct nbmsg_t {
uint32_t magic;
uint32_t cookie;
uint32_t cmd;
uint32_t arg;
uint8_t data[0];
} nbmsg;
typedef struct nbfile_t {
uint8_t* data;
size_t size; // max size of buffer
size_t offset; // write pointer
} nbfile;
int netboot_init(void);
int netboot_poll(void);
void netboot_close(void);
// Ask for a buffer suitable to put the file /name/ in
// Return NULL to indicate /name/ is not wanted.
nbfile* netboot_get_buffer(const char* name);