
For the nearly ten years that I have been at RadiSys, I have been fortunate to work on a wide variety of projects. Every few years brings change and a whole new set of challenges.
In the early years, our focus remained the ARTIC products, but with some upgrades that moved the product closer into the fold of other RadiSys offerings. We produced CompactPCI versions of the PowerPC coprocessor card, which were software compatible but just a different size and shape. Also, we expanded our "host" operating system support; the main computer into which our adapter plugged into could now run Solaris and Linux as well as Windows, AIX (IBM's UNIX variation), or OS/2. (We even had a DOS driver at one point, but I never came near it.)
My main contributions during this time were porting a third-party protocol stack onto the coprocessor: a protocol which most of our customers needed but we didn't have ourselves. It was definitely a good thing to have from a marketing point of view. It was my first taste of porting third party software and that's something I've encountered more and more over the years. This went on for more than a year, and involved a few nice trips to Vancouver to work out the kinks.
A shortcoming of our proprietary OS was that it had no builtin Ethernet support. The early adapters we built didn't even have Ethernet ports, not surprisingly. This was still well before Linux had gained a lot of traction, so again we ported a third-party stack for this. It was STREAMS-based and so fit pretty well, although it was a lot of work. We had no notion of filesystems, or POSIX, or nameservers, and so a lot of that had to be dealt with before it really worked.
After a couple of years of this, those products began to fade from the top of the corporate wishlist. There were other important projects and we slowly began to take on some of this work. The first was in the area of network processors, specialized CPUs that were designed for low-level packet processing. Our focus was on building hardware and writing device-drivers and the like to support customer software development. My focus was on the host device driver this time, rather than the microcode. It was the first time I wrote a Linux driver from scratch, and it was written with portability in mind, so that to date many of our drivers still borrow key elements from that original code.
Around 2003, RadiSys began to migrate from CompactPCI to the new AdvancedTCA (ATCA) standard. This was a monumental leap for the company and required resources across all of engineering. I was chosen as the lead for one of the most crucial pieces of software for these systems: the shelf manager. Though third-parties offered this software, we chose to roll our own and use that as a key differentiator, as it was customizable, optimized for our hardware, and saved us having to pay some royalties. (Looking back, as ATCA is now our bread-and-butter business, those royalties would have really added up.)
The shelf manager project went on for 2-3 years, and during that time I was mostly working alone in our office, with occasional help from some others but mostly working with some engineers at remote sites. It was by far the largest software project I've ever developed and probably taught me more about writing software than any other. For the first time, performance was not the most critical issue, but rather reliability, as the shelf manager was responsible for the coordination and control of dozens of processors, hundreds of sensors, and a complex interconnecting network that had redundancy and was changing all the time.
This brings us to 2006, when the shelf manager was stable enough for me to move on to other things. Since then, my focus has again been on network processors, in a variety of capacities. I've spent less time writing new software from scratch, and more time doing integration and designing modules for other engineers to implement.
IBM hired me fresh out of college to work on the firmware for the ARTIC family of co-processor and communications cards. These were a series of ISA and PCI plugin cards that resembled a mini- computer, with its own processor, memory, and so forth. The main purpose was to offload the main CPU from having to run a full software stack for various networking protocols. Processors on these cards range from the 80186 in the days before I arrived, to the Intel 960, to a PowerPC 603.
The later generations ran a proprietary operating system which was my main assignment. Initial tasks included general maintenance, feature upgrades, and performance improvements on the 960 cards. I was the lead on porting the entire OS to the PowerPC, which was an enormous nine-month effort but it went fairly smoothly as I look back.
The OS supported the UNIX STREAMS paradigm for writing pluggable device drivers and protocol layers. I did a lot of maintenance on this area, pruning out old sections of the code that weren't needed and rewriting subsystems that were a performance bottleneck (e.g. the memory allocator).
Secondary to this, my other main assignments at IBM were on a daughtercard that plugged in to the coprocessor board, which had a DSP for doing low-level, bit-at-a-time data processing. The original version of this used an IBM MWAVE DSP and all of the code was written in assembly language. Later, we followed up with a TI DSP-based version. The task of porting all of the code was distributed among three or four of us and my contribution was writing a simple, bare metal operating system (similar to STREAMS but more specialized since it was a closed platform). All of this was written in C, thank goodness.
In 1998 our business unit was acquired from IBM by RadiSys Corporation. Work on the ARTIC products
continued for some time thereafter, but we gradually moved on to doing other things (see above).
© Copyright 2009 by Brian Dominy.